Vous pouvez envelopper toute la connexion dans un gestionnaire de contexte, comme ce qui suit:
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()
faire quelque chose comme celui-ci où jamais vous avez besoin d'une connexion de base de données:
with open_db_connection("...") as cursor:
# Your code here
Le la connexion se ferme lorsque vous quittez le bloc avec. Cela annulera également la transaction si une exception se produit ou si vous n'avez pas ouvert le bloc à l'aide de with open_db_connection("...", commit=True)
.
drôle je pouvais utiliser la mise en commun, mais MySQL démarre juste un autre conn avec un nouvel ID. – Merlin