Mysql
 sql >> база данни >  >> RDS >> Mysql

AttributeError:__exit__ на python 3.4

Опитвате се да използвате връзката като контекстен мениджър:

with conn:

Този обект не прилага необходимите методи, за да се използва по този начин; не е контекстен мениджър, тъй като му липсва (поне) __exit__ метод .

Ако четете урок или документация, която използва различен MySQL библиотека, имайте предвид, че тази функция може да се поддържа от някои библиотеки, само не тази. Проектът MySQLdb го поддържа, например.

За вашите специфични случай, дори не е необходимо да използвате with conn: линия изобщо; не правите никакви промени в базата данни, никъде не се изисква ангажимент. Можете безопасно да премахнете with conn: ред (премахнете отстъпа на всичко под него с една стъпка). В противен случай можете да замените контекстния мениджър с ръчен conn.commit() другаде.

Като алтернатива можете да създадете свой собствен контекстен мениджър за този случай на употреба, като използвате @contextlib.contextmanager() декоратор :

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

и използвайте това като:

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

където можете да подадете допълнителни аргументи за connection.start_transaction() обаждане .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. GAE Python - Няма модул с име MySQLdb

  2. Как да покажа последните 10 минути стари записи от mysql

  3. Не мога да осъществя достъп до някаква база данни като root, след като току-що я създадох

  4. PDO/MYSQL подготвените изрази не са екраниращи символи?

  5. Проблем с mysql gem на osx 10.6.8