5

現在、execute many関数を使用して、MySQLデータベースに値(タプルのリスト)を挿入するスクリプトを実行しています。少数の行( `1000)を使用すると、スクリプトは正常に実行されます。

約40,000行を使用すると、次のエラーが発生します。

cursor.executemany( stmt, trans_frame)
Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\IPython\core\interactiveshell.py", line 2538, in run_code
    exec code_obj in self.user_global_ns, self.user_ns
  File "<ipython-input-1-66b44e71cf5a>", line 1, in <module>
    cursor.executemany( stmt, trans_frame)
  File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 253, in executemany
    r = self._query('\n'.join([query[:p], ',\n'.join(q), query[e:]]))
  File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 346, in _query
    rowcount = self._do_query(q)
  File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 310, in _do_query
    db.query(q)
OperationalError: (2006, 'MySQL server has gone away')

助言がありますか?

4

2 に答える 2

3
sql ='SET GLOBAL max_allowed_packet=500*1024*1024'
cursor.execute(sql)
于 2016-11-15T09:20:09.457 に答える
3

1 つのセッションだけにmax_allowed_packetパラメーターを設定してみることができます。

sql ='SET SESSION max_allowed_packet=500M'
cursor.execute(sql)
sql = ...
args = ...
cursor.executemany(sql, args)

これが機能する場合は、コードをそのままにしておくか、my.cnf ファイルを変更できます (executemany の問題が解決されることがわかっている場合)。

于 2012-11-08T15:37:42.520 に答える