0

我的问题发生如下:

我使用 mysqldb 的 API,代码如下:

 conn = MySQLdb.connect(host='192.168.1.16', user='henry', passwd='password', db='test', charset='utf8')
 cur = conn.cursor()

没关系,连接 mysql 是成功的,它也适用于这个:

select count(*) from songs;   everthing is allright.

但是如果我像这样使用sql:

select * from songs;

错误是:

connect mysqldb error. the songs table has 5000000 rows.
4

2 回答 2

1

MySQLdb将select语句的所有行和列都保存在内存中,在你的情况下是5M行*n列,所以错误可能是由两个原因引起的:
1.结果太大而无法保存在内存中。
2.结果太大,无法通过网络连接传输。

您可以尝试只返回几行,而不是全部。如果你真的想检索整个表,请分几次完成。

于 2013-06-09T03:44:12.903 回答
0

James Bear 是正确的,您可能内存不足。您应该使用游标,以便仅在需要时加载所需的数据。

您可以cursorclass=MySQLdb.cursors.SSCursor输入连接功能,这应该可以解决问题。

请参阅如何有效地使用 MySQLDB SScursor?.

于 2013-06-09T06:15:32.717 回答