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

Menedżer kontekstu dla MySQLdb w Pythonie

Wcześniej , połączenia MySQLdb były menedżerami kontekstu. Od to zobowiązanie w dniu 04.12.2018 r. jednak połączenia MySQLdb nie są już menedżerami kontekstu, a użytkownicy muszą jawnie wywołać conn.commit() lub conn.rollback() lub napisać własny menedżer kontekstu, taki jak ten poniżej.

Możesz użyć czegoś takiego:

import config
import MySQLdb
import MySQLdb.cursors as mc
import _mysql_exceptions
import contextlib
DictCursor = mc.DictCursor
SSCursor = mc.SSCursor
SSDictCursor = mc.SSDictCursor
Cursor = mc.Cursor

@contextlib.contextmanager
def connection(cursorclass=Cursor,
               host=config.HOST, user=config.USER,
               passwd=config.PASS, dbname=config.MYDB,
               driver=MySQLdb):
    connection = driver.connect(
            host=host, user=user, passwd=passwd, db=dbname,
            cursorclass=cursorclass)
    try:
        yield connection
    except Exception:
        connection.rollback()
        raise
    else:
        connection.commit()
    finally:
        connection.close()

@contextlib.contextmanager
def cursor(cursorclass=Cursor, host=config.HOST, user=config.USER,
           passwd=config.PASS, dbname=config.MYDB):
    with connection(cursorclass, host, user, passwd, dbname) as conn:
        cursor = conn.cursor()
        try:
            yield cursor
        finally:
            cursor.close()


with cursor(SSDictCursor) as cur:
    print(cur)
    connection = cur.connection
    print(connection)
    sql = 'select * from table'
    cur.execute(sql)
    for row in cur:
        print(row)

Aby z niego skorzystać, umieść config.py w PYTHONPATH i zdefiniuj tam zmienne HOST, USER, PASS, MYDB.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL5.6 utknął w procesie próbującym uruchomić usługę

  2. Obejście błędu MySQL Wykryto zakleszczenie podczas próby uzyskania blokady; spróbuj zrestartować transakcję

  3. jak używać `charset` i `encoding` w `create_engine` SQLAlchemy (aby stworzyć pandas dataframe)?

  4. Wstawianie wielu wierszy z formularza php do bazy danych

  5. Python SQL — jak korzystać z baz danych SQLite, MySQL i PostgreSQL w Pythonie