sql >> Databáze >  >> RDS >> Mysql

AttributeError:__exit__ na pythonu 3.4

Pokoušíte se použít připojení jako správce kontextu:

with conn:

Tento objekt neimplementuje nezbytné metody, aby mohl být takto použit; není to kontextový manažer, protože chybí (alespoň) __exit__ metoda .

Pokud čtete výukový program nebo dokumentaci, která používá jiné Knihovna MySQL, mějte na paměti, že tuto funkci mohou někteří podporovat knihovny, jen ne tuto. projekt MySQLdb například to podporuje.

Pro vaše konkrétní V tomto případě ani nemusíte používat with conn: linka vůbec; v databázi neprovádíte žádné změny, nikde není vyžadováno potvrzení. with conn: můžete bezpečně odebrat řádek (odsazení všeho pod ním o jeden krok). Jinak můžete kontextový manažer nahradit ručním conn.commit() jinde.

Alternativně můžete pro tento případ použití vytvořit svůj vlastní kontextový manažer pomocí @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()

a použijte toto jako:

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

kde můžete předat další argumenty pro connection.start_transaction() zavolat .




  1. Typ data bez času v Oracle

  2. nelze vložit datový rámec do existující tabulky Oracle

  3. Název souboru v klauzuli WHERE v Mysql nevrací nic

  4. Kombinujte skupinu a počítejte mysql