我正在使用python 2.7,pyodbc和mysql 5.5。我在窗户上
我有查询返回数百万行,我想以块的形式处理它。 使用fetchmany函数。
他是代码的一部分
import pyodbc
connection = pyodbc.connect('Driver={MySQL ODBC 5.1 Driver};Server=127.0.0.1;Port=3306;Database=XXXX;User=root; Password='';Option=3;')
cursor_1 = connection.cursor()
strSQLStatement = 'SELECT x1, x2 from X'
cursor_1.execute(strSQLStatement)
# the error occurs here
x1 = cursor_1.fetchmany(10)
print x1
connection.close()
我的问题:
我收到错误 MySQL客户端内存不足
我想这是因为cursor_1.execute
尝试将所有内容读入内存并尝试以下(逐个)但无济于事
我的问题:
pyodbc是否可以运行查询并仅按需提供结果?
MySQL手册建议invoke mysql with the --quick option。不使用命令行时也可以这样做吗?
感谢您的帮助。
P.S:也欢迎使用替代MySQL模块的建议,但我使用便携式python,所以我的选择有限。
答案 0 :(得分:0)
在查询字符串上使用LIMIT子句。
http://dev.mysql.com/doc/refman/5.5/en/select.html
使用
SELECT x1, x2 from X LIMIT 0,1000
您只能获得第1个1k记录,然后执行:
SELECT x1, x2 from X LIMIT 1000,2000
你会得到下一个1k的记录。
适当地循环以获取所有记录。 (我不知道python在这里无法帮助:()
答案 1 :(得分:0)
将MySQLdb与SSCursor一起使用将解决您的问题。
不幸的是,文档不是很好,但user guide中提到了它,你可以找到一个例子in this stackoverflow question。