si può avvolgere l'intera connessione in un contesto responsabile, come il seguente:
from contextlib import contextmanager
import pyodbc
import sys
@contextmanager
def open_db_connection(connection_string, commit=False):
connection = pyodbc.connect(connection_string)
cursor = connection.cursor()
try:
yield cursor
except pyodbc.DatabaseError as err:
error, = err.args
sys.stderr.write(error.message)
cursor.execute("ROLLBACK")
raise err
else:
if commit:
cursor.execute("COMMIT")
else:
cursor.execute("ROLLBACK")
finally:
connection.close()
poi fare qualcosa come questo, dove mai è necessario una connessione al database:
with open_db_connection("...") as cursor:
# Your code here
Il la connessione si chiuderà quando si lascia il blocco con. In questo modo si ripristinerà anche la transazione se si verifica un'eccezione o se non si è aperto il blocco utilizzando with open_db_connection("...", commit=True)
.
divertente ho potuto usare la messa in comune, ma mysql appena inizia un'altra conn con un nuovo ID. – Merlin