如何有效地使用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)