Vous essayez d'utiliser la connexion en tant que gestionnaire de contexte :
with conn:
Cet objet n'implémente pas les méthodes nécessaires pour être utilisé comme ça; ce n'est pas un gestionnaire de contexte, car il manque (au moins) le __exit__
méthode
.
Si vous lisez un tutoriel ou une documentation qui utilise un différent Bibliothèque MySQL, sachez que cette fonctionnalité peut être prise en charge par certains bibliothèques, mais pas celle-ci. Le projet MySQLdb le prend en charge, par exemple.
Pour votre spécifique cas, vous n'avez même pas besoin d'utiliser le with conn:
ligne du tout; vous n'apportez aucune modification à la base de données, aucun commit n'est requis nulle part. Vous pouvez supprimer en toute sécurité le with conn:
ligne (désindentez tout ce qui se trouve en dessous d'une étape). Sinon, vous pouvez remplacer le gestionnaire de contexte par un manuel conn.commit()
ailleurs.
Alternativement, vous pouvez créer votre propre gestionnaire de contexte pour ce cas d'utilisation, en utilisant @contextlib.contextmanager()
décorateur
:
from contextlib import contextmanager
@contextmanager
def manage_transaction(conn, *args, **kw):
exc = False
try:
try:
conn.start_transaction(*args, **kw)
yield conn.cursor()
except:
exc = True
conn.rollback()
finally:
if not exc:
conn.commit()
et utilisez ceci comme :
with manage_transaction(conn) as cursor:
# do things, including creating extra cursors
où vous pouvez transmettre des arguments supplémentaires pour connection.start_transaction()
appeler
.