如何有效地使用MySQLDB的SScursor?

我必须处理一个大的结果集(可能是成千上万的行,有时更多)。
不幸的是,他们需要一次性检索(启动时)。

我试图通过使用尽可能less的内存来做到这一点。
通过查看所以我发现使用SSCursor可能是我正在寻找,但我仍然不知道如何正确使用它们。

从基本游标或SScursor做一个fetchall()相同的内存使用)?
我可以从我的行逐行(或几个)串stream,如果是的话,
最好的办法是什么?

我同意Otto Allmendinger的回答,但要明确Denis Otkidach的评论,下面是如何在不使用Otto的fetch()函数的情况下迭代结果:

 import MySQLdb.cursors connection=MySQLdb.connect( host="thehost",user="theuser", passwd="thepassword",db="thedb", cursorclass = MySQLdb.cursors.SSCursor) cursor=connection.cursor() cursor.execute(query) for row in cursor: print(row) 

在获取较大的结果集时绝对使用SSCursor。 当我遇到类似的问题时,对我来说有很大的不同。 你可以像这样使用它:

 import MySQLdb import MySQLdb.cursors connection = MySQLdb.connect( host=host, port=port, user=username, passwd=password, db=database, cursorclass=MySQLdb.cursors.SSCursor) # put the cursorclass here cursor = connection.cursor() 

现在你可以使用cursor.execute()来执行你的查询,并使用游标作为迭代器。

编辑 :删除不必要的本土迭代,谢谢丹尼斯!

或者,您可以在连接对象外部使用SSCursor (当您已经定义了连接并且不希望所有连接都使用SSCursor作为cursorclass时,这非常重要)。

 import MySQLdb from MySQLdb.cursors import SSCursor # or you can use SSDictCursor connection = MySQLdb.connect( host=host, port=port, user=username, passwd=password, db=database) cursor = SSCursor(connection) cursor.execute(query) for row in cursor: print(row)