2012-11-08 2 views
3

실행중인 많은 함수를 사용하여 MySQL 데이터베이스에 값 (튜플 목록)을 삽입하는 스크립트를 현재 실행하고 있습니다. 적은 수의 행 (`1000)을 사용하면 스크립트가 제대로 실행됩니다.많은 수의 행에 대해 MySQL 데이터베이스 executemany가 발생했습니다.

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') 

어떤 제안 :

내가 주변에 40,000 행을 사용하여, 나는 다음과 같은 오류가 나타날?

+0

체크 MySQL 서버 – Bastian

+0

읽나요 [이] (http://stackoverflow.com/a/9479681/510937) 응답의 오류 로그? 도움이 될 수 있습니다. – Bakuriu

+0

그게 문제 같아. 나는 파이썬에서 오히려 새로운 것이고 파이썬 (max_allowed_packet)에서 그 매개 변수를 조정하는 방법을 모르겠습니다. 어떤 제안? 정말 고마워!! – Matt

답변

1

당신은 max_allowed_packet 매개 변수를 just for one session 설정을 시도 할 수 :

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

이 작동하는 경우

, 당신은 (즉, executemany 문제를 해결 것을 알고) 귀하의 my.cnf 파일을 그대로 코드를 떠나, 또는 변경 될 수 있습니다.

+1

여러분 모두를 도와 주셔서 감사합니다. 결국 나는 허가가 없기 때문에 전역 변수를 조정할 수 없습니다. 그러나 한 번에 500 개의 행을 삽입하는 루프를 만들었는데, 이는 단지 실행 문을 사용하여 루프보다 훨씬 빠릅니다 (* 1000). – Matt

1
sql ='SET GLOBAL max_allowed_packet=500*1024*1024' 
cursor.execute(sql) 
관련 문제