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

2024-05-02 17:19:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是python2.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()

我的问题是:

  1. 我得到错误消息MySQL client耗尽了内存

  2. 我想这是因为cursor_1.execute试图将所有内容读入内存,并尝试了以下操作(一个接一个),但没有成功

    1. 在用户界面(ODBC-管理工具)中,我勾选了“不缓存只转发光标的结果”
    2. 连接.查询(“设置全局查询\u cache_size=40000”)

我的问题:

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

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

谢谢你的帮助。在

附言:对于一个替代的MySQL模块的建议也很受欢迎,但是我使用的是可移植的python,所以我的选择是有限的。在


Tags: the内存executedrivermysqlconnectioncursor建议
2条回答

对查询字符串使用LIMIT子句。在

http://dev.mysql.com/doc/refman/5.5/en/select.html

通过使用

SELECT x1, x2 from X LIMIT 0,1000 

你只会得到前1k的记录,然后通过:

^{pr2}$

你会得到接下来的1k唱片。在

适当地循环以获取所有记录。(我不认识python,所以在这里帮不上忙:()

{MySQLdb}将使用MySQLdb}解决问题。在

不幸的是,文档不是很好,但是它在user guide中提到过,您可以找到一个示例in this stackoverflow question。在

相关问题 更多 >