MySQLdb avec de multiples transactions par connexion
Est-il acceptable d'utiliser un seul MySQLdb de connexion pour plusieurs transactions sans fermer la connexion entre eux? En d'autres termes, quelque chose comme ceci:
conn = MySQLdb.connect(host="1.2.3.4", port=1234, user="root", passwd="x", db="test")
for i in range(10):
try:
cur = conn.cursor()
query = "DELETE FROM SomeTable WHERE ID = %d" % i
cur.execute(query)
cur.close()
conn.commit()
except Exception:
conn.rollback()
conn.close()
Il semble fonctionner ok, mais je voulais juste vérifier.
- Dommage que vous ne laissez pas votre erreur. Je me suis vraiment confus avant de lire les révisions parce que je ne vois pas ce qu'était le malentendu Martijn Pieters a parlé.
Vous devez vous connecter pour publier un commentaire.
Je pense qu'il y a un malentendu à propos de ce qui constitue une transaction ici.
Votre exemple ouvre une connexion, puis exécute un transaction sur elle. Vous exécuter plusieurs instructions SQL dans la transaction, mais de le fermer complètement après avoir commis. Bien sûr, c'est plus que bien.
De l'exécution de plusieurs transactions (plutôt que de simplement les instructions SQL), ressemble à ceci:
Le code ci-dessus s'engage transactions 10, composés chacun de 10 delete.
Et oui, vous devriez être en mesure de ré-utiliser la connexion ouverte pour que, sans problèmes, aussi longtemps que vous ne partagez pas cette connexion entre les threads.
Par exemple, SQLAlchemy ré-utilise les connexions par des mises en commun, en distribuant des connexions ouvertes en tant que de besoin à la demande. De nouvelles transactions et de nouvelles instructions sont exécutées sur ces connexions tout au long de la durée de vie d'une application, sans avoir besoin d'être fermé jusqu'à l'arrêt de l'application.
Il serait préférable de créer une chaîne de requête, puis l'exécuter MySQL déclaration. Par exemple: