Domnívám se, že zde došlo k nedorozumění ohledně toho, co představuje transakci.
Váš příklad otevře jedno připojení a poté provede jedno transakce na něm. V této transakci provedete více příkazů SQL, ale po potvrzení ji úplně zavřete. To je samozřejmě více než v pořádku.
Provádění více transakcí (na rozdíl od pouze příkazů SQL), vypadá takto:
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()
Výše uvedený kód provede 10 transakcí, z nichž každá sestává z 10 jednotlivých příkazů k odstranění.
A ano, měli byste být schopni bez problémů znovu použít otevřené připojení, pokud toto připojení nesdílíte mezi vlákny.
Například SQLAlchemy znovu používá připojení tím, že je sdružuje a předává otevřená připojení podle potřeby aplikaci. Nové transakce a nové příkazy jsou na těchto připojeních prováděny po celou dobu životnosti aplikace, aniž by bylo nutné je zavírat, dokud není aplikace ukončena.