Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQLdb avec plusieurs transactions par connexion

Je pense qu'il y a un malentendu sur ce qui constitue une transaction ici.

Votre exemple ouvre une connexion, puis en exécute une transaction dessus. Vous exécutez plusieurs instructions SQL dans cette transaction, mais vous la fermez complètement après la validation. Bien sûr, c'est plus que bien.

Exécution de plusieurs transactions (par opposition aux instructions SQL uniquement), ressemble à ceci :

conn = MySQLdb.connect(host="1.2.3.4", port=1234, user="root", passwd="x", db="test")

for j in range(10):
    try:
        for i in range(10):
            cur = conn.cursor()
            query = "DELETE FROM SomeTable WHERE ID = %d" % i
            cur.execute(query)
            cur.close()
        conn.commit()
    except Exception:
        conn.rollback()

conn.close()

Le code ci-dessus valide 10 transactions, chacune composée de 10 instructions de suppression individuelles.

Et oui, vous devriez pouvoir réutiliser la connexion ouverte pour cela sans problème, tant que vous ne partagez pas cette connexion entre les threads.

Par exemple, SQLAlchemy réutilise les connexions en les regroupant, en distribuant les connexions ouvertes selon les besoins à l'application. 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ées jusqu'à ce que l'application soit fermée.