2017-06-28 3 views
0

Ich schrieb diese Funktion, die ohne Fehler ausgeführt wird.MySQL-Server ist weggegangen, wenn Verwendung "Executemany" in Python-Code

Aber ich habe den folgenden Fehler, wenn ich meinen Code auf einem anderen Computer für die gleichen Daten ausführen.

MySQL Error [2006]: MySQL server has gone away 
Traceback (most recent call last): 
    File "main.py", line 157, in <module> 
    writePostingLists(lst) 
    File "main.py", line 32, in writePostingLists 
    mydb.insertKNNIndex(postingLists,tabelName) 
    File "/home/pythonCode/Doc2Vec_Annoy/KNN/MySQLRepository.py", line 78, in insertKNNIndex 
    self.insertRows(query,inputList) 
    File "/home/pythonCode/Doc2Vec_Annoy/KNN/MySQLRepository.py", line 31, in insertRows 
    self.connection.rollback() 
_mysql_exceptions.OperationalError: (2006, 'MySQL server has gone away') 

Ich fand heraus, dass das Problem die Länge der Liste ist, dass ich Funktion executemany geben.

Der obige Code wird ohne Probleme ausgeführt werden, wenn die Länge der Daten als 300 weniger ist

Wie kann ich dieses Problem lösen? Bezieht sich dies auf die Einstellung von MySQl?

Antwort

1

Eine Option hier wäre, die Liste in Zeilen von 100 oder so zu teilen. Zum Beispiel:

def insertRows(self, query,data, LIST_LENGTH=100): 
    START_INDEX = 0 
    while data[START_INDEX:START_INDEX+LIST_LENGTH]: 
     self.cursor.executemany(query,data[START_INDEX:START_INDEX+LIST_LENGTH]) 
     START_INDEX += LIST_LENGTH 
    self.connection.commit() 

Ich nehme an mysql (oder mysql-Python) wahrscheinlich eine maximale Zeichenlänge der Datenmenge hat Sie es passieren kann.

Ihre Fehler Zu (von https://piwik.org/faq/troubleshooting/faq_183/):

Wenn mysqld ein Paket erhält, die zu groß oder falsch ist, geht davon aus, dass etwas mit dem Kunden schief gegangen ist und schließt die Verbindung. Um das Problem zu beheben, können Sie die maximale Paketgrößenbeschränkung max_allowed_packet in der Datei my.cnf erhöhen, z. set max_allowed_packet = 128M, dann starten Sie Ihren MySQL-Server neu: sudo /etc/init.d/mysql restart.

+0

Ich suche nach dem Grund, diesen Fehler auf einem Computer zu bekommen. Es ist nicht die Lösung, nach der ich suche. – Fatima

+0

@Fatima siehe aktualisierte Antwort. – David542

Verwandte Themen