python - 在 mysql 中禁用缓存结果(使用 python)

标签 python mysql pyodbc

我正在使用 python 2.7、pyodbc 和 mysql 5.5。我在 window 上

我有一个返回数百万行的查询,我想分块处理它。 使用 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()

我的问题:

  1. 我收到错误消息MySQL 客户端内存不足

  2. 我猜这是因为 cursor_1.execute 试图将所有内容读入内存并尝试了以下(一个接一个)但无济于事

    1. 在用户界面(ODBC – 管理工具)中,我勾选了“不缓存仅转发游标的结果”
    2. connection.query("SET GLOBAL query_cache_size = 40000")

我的问题:

  1. pyodbc 是否可以运行查询并仅按需提供结果?

  2. MySQL手册建议invoke mysql with the --quick option .不使用命令行时也可以这样做吗?

感谢您的帮助。

P.S:也欢迎提出替代 MySQL 模块的建议,但我使用的是可移植的 python,所以我的选择有限。

最佳答案

将 MySQLdb 与 SSCursor 结合使用将解决您的问题。

不幸的是,文档不是很好,但在 user guide 中提到了它你可以找到一个例子 in this stackoverflow question .

关于python - 在 mysql 中禁用缓存结果(使用 python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12085204/

相关文章:

python - 是否有更惯用的方法来根据列的内容从 PyArrow 表中选择行?

python - 'NoneType' 对象没有属性 'DoesNotExist'

php - 如何在 Codeigniter 中将所有上传图像的文件名添加到数据库中?

mysql - 使用动态选择mysql存储过程的列

python - 从 Python 连接到 Apache Drill

python - sql server函数 native 参数绑定(bind)错误

Python 多处理 - 如何监控内存使用情况?

python - np.ndarray 的类型参数

MySQL 选择前 3 个字符并替换

python - 如何处理 CSV 文件中 DECIMAL 列的缺失值