【发布时间】:2012-08-23 05:24:39
【问题描述】:
我正在使用 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尝试将所有内容读入内存并尝试以下(一一)但无济于事- 在用户界面(ODBC - 管理工具)中,我勾选了“不缓存仅转发游标的结果”
- connection.query("SET GLOBAL query_cache_size = 40000")
我的问题:
pyodbc 是否可以运行查询并仅按需提供结果?
MySQL 手册建议invoke mysql with the --quick option。不使用命令行时也可以这样做吗?
感谢您的帮助。
P.S:也欢迎提供替代 MySQL 模块的建议,但我使用的是可移植的 python,所以我的选择有限。
【问题讨论】:
-
为什么不在查询本身中使用
LIMIT 10?