相关疑难解决方法(0)

如何在python中获取逐行MySQL ResultSet

默认情况下,MySQL ResultSet会在完成任何工作之前从服务器中完全检索.在巨大的结果集的情况下,这变得无法使用.我希望实际上从服务器中逐个检索行.

在Java中,按照这里的说明(在"ResultSet"下),我创建一个这样的语句:

stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,
              java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);
Run Code Online (Sandbox Code Playgroud)

这在Java中很有效.我的问题是:有没有办法在python中做同样的事情?

我试过的一件事是一次将查询限制为1000行,如下所示:

start_row = 0
while True:
    cursor = conn.cursor()
    cursor.execute("SELECT item FROM items LIMIT %d,1000" % start_row)
    rows = cursor.fetchall()
    if not rows:
        break
    start_row += 1000
    # Do something with rows...
Run Code Online (Sandbox Code Playgroud)

但是,较高的start_row似乎会变慢.

不,使用fetchone()fetchall()不是改变任何东西.

澄清:

我用来重现这个问题的天真代码如下所示:

import MySQLdb

conn = MySQLdb.connect(user="user", passwd="password", db="mydb")
cur = conn.cursor()
print "Executing query"
cur.execute("SELECT * FROM bigtable");

print "Starting loop"
row = cur.fetchone()
while row is not None:
    print …
Run Code Online (Sandbox Code Playgroud)

python mysql

47
推荐指数
3
解决办法
7万
查看次数

如何有效地使用MySQLDB SScursor?

我必须处理一个大的结果集(可能是数十万行,有时更多).
不幸的是,它们需要一次性检索(启动时).

我试图通过使用尽可能少的内存来做到这一点.
通过查看,我发现使用SSCursor可能是我正在寻找的,但我仍然不知道如何正确使用它们.

fetchall()从基本游标或SScursor 做一个相同的(在内存使用方面)?
我可以从sscursor我的行逐个"流动"(或几个),如果是,
那么最好的方法是什么?

python mysql optimization cursor

31
推荐指数
2
解决办法
2万
查看次数

标签 统计

mysql ×2

python ×2

cursor ×1

optimization ×1