Мисля, че тук има неразбиране какво представлява транзакция.
Вашият пример отваря една връзка, след което изпълнява една транзакция върху него. Вие изпълнявате множество SQL оператори в тази транзакция, но я затваряте напълно след извършване. Разбира се, това е повече от добре.
Изпълнение на множество транзакции (за разлика от просто SQL изрази), изглежда така:
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()
Горният код извършва 10 транзакции, всяка от които се състои от 10 отделни оператора за изтриване.
И да, трябва да можете да използвате повторно отворената връзка за това без проблеми, стига да не споделяте тази връзка между нишките.
Например, SQLAlchemy използва повторно връзки, като ги обединява, като раздава отворени връзки според нуждите на приложението. Нови транзакции и нови оператори се изпълняват върху тези връзки през целия живот на приложението, без да е необходимо да бъдат затваряни, докато приложението не бъде изключено.