Jag tror att det finns ett missförstånd om vad som utgör en transaktion här.
Ditt exempel öppnar en anslutning och kör sedan en transaktion på den. Du kör flera SQL-satser i den transaktionen, men du stänger den helt efter commit. Naturligtvis är det mer än bra.
Utför flera transaktioner (i motsats till bara SQL-satser), ser ut så här:
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()
Ovanstående kod begår 10 transaktioner, var och en bestående av 10 individuella raderingsutdrag.
Och ja, du bör kunna återanvända den öppna anslutningen för det utan problem, så länge du inte delar den anslutningen mellan trådar.
Till exempel, SQLAlchemy återanvänder anslutningar genom att slå samman dem, dela ut öppna anslutningar efter behov till applikationen. Nya transaktioner och nya uttalanden exekveras på dessa anslutningar under en applikations livstid, utan att behöva stängas förrän applikationen stängs av.