Mysql
 sql >> Baza danych >  >> RDS >> Mysql

AttributeError:__exit__ na Pythonie 3.4

Próbujesz użyć połączenia jako menedżera kontekstu:

with conn:

Ten obiekt nie implementuje niezbędnych metod do takiego użycia; nie jest menedżerem kontekstu, ponieważ brakuje (przynajmniej) __exit__ metoda .

Jeśli czytasz samouczek lub dokumentację, która używa innego Biblioteka MySQL, pamiętaj, że ta funkcja może być obsługiwana przez niektóre biblioteki, tylko nie ta. Projekt MySQLdb obsługuje go, na przykład.

Dla Twojego konkretnego przypadku, nie musisz nawet używać with conn: w ogóle linia; nie wprowadzasz żadnych zmian w bazie danych, nigdzie nie jest wymagane zatwierdzenie. Możesz bezpiecznie usunąć with conn: linia (odrzuć wszystko pod nią w jednym kroku). W przeciwnym razie możesz zastąpić menedżera kontekstu ręcznym conn.commit() gdzie indziej.

Alternatywnie możesz utworzyć własnego menedżera kontekstu dla tego przypadku użycia, używając @contextlib.contextmanager() dekorator :

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

i użyj tego jako:

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

gdzie możesz przekazać dodatkowe argumenty dla connection.start_transaction() zadzwoń .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przekonwertować epoch na znacznik czasu mySQL w JAVA

  2. Wywołanie procedury składowanej przy użyciu ADODB w PHP

  3. ma być posible w mysql powtórzyć ten sam wynik

  4. SQL:Jak mogę zaktualizować wartość w kolumnie tylko wtedy, gdy ta wartość jest pusta?

  5. Dzika karta przed i po ciągu — MySql, PSQL