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

时间:2012-08-23 05:24:39

标签: python mysql pyodbc

我正在使用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()

我的问题:

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

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

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

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

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

    3. 感谢您的帮助。

      P.S:也欢迎使用替代MySQL模块的建议,但我使用便携式python,所以我的选择有限。

2 个答案:

答案 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