【MySQL】ERROR : (2006, 'MySQL server has gone away')
1204 ワード
クライアントとMySQLサーバの間のリンクが切れたことを意味します.
このような原因は、一般的にsql操作の時間が長すぎるか、転送されたデータが大きすぎる(例えばinsert...valuesを使用する文が長すぎる場合、max_allowed_packedの構成パラメータを変更することによって回避したり、プログラムでデータをバッチで挿入したりすることができます).
次はpythonでデータバッチ挿入の操作を少しカプセル化します.
このような原因は、一般的にsql操作の時間が長すぎるか、転送されたデータが大きすぎる(例えばinsert...valuesを使用する文が長すぎる場合、max_allowed_packedの構成パラメータを変更することによって回避したり、プログラムでデータをバッチで挿入したりすることができます).
次はpythonでデータバッチ挿入の操作を少しカプセル化します.
def process_insert_list(cursor, tbl_name, insert_list):
insert_sql = ''
insert_head = "insert ignore into %s values"%tbl_name
len_col = len(insert_list[0])
tmp_str_s = '('
tmp_str_e = ')'
for i in range (1 , len_col):
tmp_str_s = tmp_str_s + '%s,'
tmp_str = tmp_str_s + '%s' + tmp_str_e
insert_sql = "%s%s"%(insert_head,tmp_str)
list_len = len(insert_list)
if list_len>0 and insert_sql!='':
insert_len = 5000 #
insert_times = list_len/insert_len+1
for i in xrange(0, insert_times):
start_index = i*insert_times
end_index = start_index+insert_len
if start_index>=list_len: break
if end_index>=list_len: end_index = list_len
tmp_list = insert_list[start_index:end_index]
cursor.executemany(insert_sql, tmp_list)