Jeg tror, der er en misforståelse om, hvad der udgør en transaktion her.
Dit eksempel åbner en forbindelse og udfører derefter en transaktion på det. Du udfører flere SQL-sætninger i den pågældende transaktion, men du lukker den fuldstændigt efter at have foretaget den. Det er selvfølgelig mere end fint.
Udførelse af flere transaktioner (i modsætning til kun SQL-sætninger), ser sådan ud:
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()
Ovenstående kode forpligter 10 transaktioner, der hver består af 10 individuelle sletteopgørelser.
Og ja, du burde kunne genbruge den åbne forbindelse til det uden problemer, så længe du ikke deler den forbindelse mellem tråde.
For eksempel, SQLAlchemy genbruger forbindelser ved at samle dem, uddele åbne forbindelser efter behov til applikationen. Nye transaktioner og nye erklæringer udføres på disse forbindelser i hele en applikations levetid uden at skulle lukkes, før applikationen lukkes ned.