Ik denk dat er hier een misverstand bestaat over wat een transactie inhoudt.
Uw voorbeeld opent één verbinding en voert vervolgens één uit transactie erop. Je voert meerdere SQL-statements uit in die transactie, maar sluit deze volledig af na het committen. Dat is natuurlijk meer dan prima.
Meerdere transacties uitvoeren (in tegenstelling tot alleen SQL-instructies), ziet er als volgt uit:
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()
De bovenstaande code voert 10 transacties uit, elk bestaande uit 10 afzonderlijke verwijderinstructies.
En ja, je zou de open verbinding daarvoor zonder problemen opnieuw moeten kunnen gebruiken, zolang je die verbinding niet tussen threads deelt.
Bijvoorbeeld SQLAlchemy hergebruikt verbindingen door ze te poolen en indien nodig open verbindingen uit te delen aan de toepassing. Op deze verbindingen worden gedurende de levensduur van een applicatie nieuwe transacties en nieuwe overzichten uitgevoerd, zonder dat deze gesloten hoeven te worden totdat de applicatie wordt afgesloten.