1

私はpython2.7、pyodbc、mysql5.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つずつ)試したが、役に立たなかったためだと思います。

    1. ユーザーインターフェイス(ODBC –管理ツール)で、[転送専用カーソルの結果をキャッシュしない]にチェックマークを付けました</ li>
    2. connection.query( "SET GLOBAL query_cache_size = 40000")

私の質問:

  1. pyodbcには、クエリを実行して結果をオンデマンドでのみ提供する可能性がありますか?

  2. MySQLのマニュアルでは、-quickオプションを指定してmysqlを呼び出すことを提案しています。これは、コマンドラインを使用しない場合にも実行できますか?

ご協力いただきありがとうございます。

PS:代替のMySQLモジュールの提案も歓迎しますが、私はポータブルpythonを使用しているため、選択肢が限られています。

4

2 に答える 2

0

クエリ文字列でLIMIT句を使用します。

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

を使用して

SELECT x1, x2 from X LIMIT 0,1000 

最初の1kレコードのみを取得し、次のようにします。

SELECT x1, x2 from X LIMIT 1000,2000 

次の1,000レコードを取得します。

これを適切にループして、すべてのレコードを取得します。(私はPythonを知らないので、ここで助けることはできません:()

于 2012-08-23T05:48:29.333 に答える
0

SSCursorでMySQLdbを使用すると、問題が解決します。

残念ながら、ドキュメントは素晴らしいものではありませんが、ユーザーガイドに記載されており、このスタックオーバーフローの質問で例を見つけることができます。

于 2012-08-23T06:45:35.933 に答える