2017-06-28 4 views
0

J'ai écrit cette fonction qui est exécutée sans erreur. Mais, j'ai l'erreur suivante lorsque j'exécute mon code sur un autre ordinateur pour les mêmes données.Le serveur MySQL est parti quand on utilise "executemany" dans le code python

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

Je trouve que le problème est la longueur de la liste que je donne à executemany fonction.

Le code ci-dessus est exécuté sans aucun problème lorsque la longueur des données est inférieure à 300.

Comment puis-je résoudre ce problème? Est-ce lié au réglage de MySQl?

Répondre

1

Une option ici serait de diviser la liste en rangées de 100 ou plus. Par exemple:

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

Je suppose que mysql (ou mysql-python) a sans doute une longueur maximale de caractères de la quantité de données que vous pouvez passer à elle.

En ce qui concerne votre erreur (de https://piwik.org/faq/troubleshooting/faq_183/):

Si mysqld reçoit un paquet qui est trop grand ou incorrect, il suppose que quelque chose a mal tourné avec le client et ferme la connexion. Pour corriger, vous pouvez augmenter la taille maximale de la taille de paquet max_allowed_packet dans le fichier my.cnf, par exemple. set max_allowed_packet = 128M, puis redémarrez votre serveur MySQL: sudo /etc/init.d/mysql restart.

+0

Je cherche à obtenir cette erreur sur un ordinateur. Ce n'est pas la solution que je cherche. – Fatima

+0

@Fatima voir la mise à jour. – David542