sql >> Databasteknik >  >> RDS >> Mysql

AttributeError:__exit__ på python 3.4

Du försöker använda anslutningen som en kontexthanterare:

with conn:

Detta objekt implementerar inte de nödvändiga metoderna för att användas på det sättet; det är inte en kontexthanterare, eftersom den saknar (åtminstone) __exit__ metod .

Om du läser en handledning eller dokumentation som använder en annan MySQL-biblioteket, tänk på att den här funktionen kan stödjas av vissa bibliotek, bara inte det här. MySQLdb-projektet stöder det till exempel.

För din specifika fall behöver du inte ens använda with conn: linje alls; du gör inga ändringar i databasen, ingen commit krävs någonstans. Du kan säkert ta bort with conn: linje (ta bort allt under ett steg). Annars kan du ersätta kontexthanteraren med en manuell conn.commit() någon annanstans.

Alternativt kan du skapa din egen kontexthanterare för detta användningsfall, med hjälp av @contextlib.contextmanager() dekoratör :

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()

och använd detta som:

with manage_transaction(conn) as cursor:
    # do things, including creating extra cursors

där du kan skicka in extra argument för connection.start_transaction() ring .




  1. Hur man installerar MySQL gem på Mac OS X

  2. Hur man beräknar dagliga aktiva användare (DAU) i MySQL

  3. Inaktiverar begränsning av främmande nyckel, kan fortfarande inte trunkera tabellen? (SQL Server 2005)

  4. Kör en fråga baserad på flera kryssrutor