Mysql
 sql >> Base de données >  >> RDS >> Mysql

AttributeError:__exit__ sur python 3.4

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 .