se puede envolver toda la conexión en un gestor de contexto, como la siguiente:
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()
luego hacer algo como esto que cada vez que necesita una conexión de base de datos:
with open_db_connection("...") as cursor:
# Your code here
El la conexión se cerrará cuando salga del bloque con. Esto también revertirá la transacción si ocurre una excepción o si no abrió el bloque usando with open_db_connection("...", commit=True)
.
divertido que podía utilizar la puesta en común, pero MySQL simplemente comienza otra conn con una nueva identificación. – Merlin