Si vous devez insérer une très grande quantité de données, pourquoi essayez-vous de les insérer tous en un seul insert
? (Cela mettra forcément en charge votre mémoire en faisant cette grande chaîne insert
et aussi en l'exécutant.En outre, ce n'est pas une très bonne solution si vos données à insérer est très très grande.)
Pourquoi ne pas vous mettez une ligne par commande insert
dans la base de données et mettez toutes les lignes en utilisant un for...loop
et validez tous les changements à la fin?
con = mysqldb.connect(
host="localhost",
user="user",
passwd="**",
db="db name"
)
cur = con.cursor()
for data in your_data_list:
cur.execute("data you want to insert: %s" %data)
con.commit()
con.close()
(Croyez-moi, ce qui est vraiment rapide mais si vous obtenez des résultats plus lents alors cela signifie que votre autocommit
doit être True
.Réglez-le à False
comme msw
dit.)
Depuis la version 1.2.0, MySQLdb désactive la validation automatique par défaut, comme requis par la norme DB-API (PEP-249). source: http://mysql-python.sourceforge.net/FAQ.html – mikewaters
Si vous pensez que vos inserts sont encore plus lents qu'ils ne devraient l'être, assurez-vous également de modifier les paramètres de votre serveur mysql. Dans mon cas, mon innodb_buffer_pool_size était trop petit pour mes transactions et en l'augmentant, j'ai atteint une accélération de + 40% pour les encarts en vrac. Voir: https://dev.mysql.com/doc/refman/5.7/en/innodb-buffer-pool.html – jlh