sql >> Database teknologi >  >> RDS >> Mysql

AttributeError:__exit__ på python 3.4

Du forsøger at bruge forbindelsen som kontekstadministrator:

with conn:

Dette objekt implementerer ikke de nødvendige metoder til at blive brugt på den måde; det er ikke en kontekstadministrator, da den mangler (i det mindste) __exit__ metode .

Hvis du læser en tutorial eller dokumentation, der bruger en anden MySQL-bibliotek, vær opmærksom på, at denne funktion muligvis understøttes af nogle biblioteker, bare ikke denne. MySQLdb-projektet understøtter det f.eks.

Til din specifikke I tilfælde af at du ikke engang behøver at bruge with conn: linje overhovedet; du laver ingen ændringer i databasen, ingen commit er påkrævet nogen steder. Du kan trygt fjerne with conn: linje (fjern indrykket alt under det et trin). Ellers kan du erstatte konteksthåndteringen med en manuel conn.commit() andre steder.

Alternativt kan du oprette din egen kontekstadministrator til denne use-case ved hjælp af @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()

og brug dette som:

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

hvor du kan sende ekstra argumenter til connection.start_transaction() ring .




  1. Hurtigste måde at udføre en sletteforespørgsel i en stor tabel i PostgreSQL

  2. Opdel en kolonne til flere kolonner, men data vil variere SQL

  3. MySQL-sortering til at gemme flersprogede data på ukendt sprog

  4. NEW_TIME() Funktion i Oracle