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

Správce kontextu pro MySQLdb Pythonu

Dříve , připojení MySQLdb byla správci kontextu. Ke dni a> připojení MySQLdb však již nejsou správci kontextu a uživatelé musí explicitně zavolat conn.commit() nebo conn.rollback() nebo napsat svůj vlastní kontextový správce, jako je ten níže.

Můžete použít něco takového:

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)

Chcete-li jej použít, umístěte config.py ve vašem PYTHONPATH a definujte tam proměnné HOST, USER, PASS, MYDB.



  1. Průvodce Pgpool pro PostgreSQL:Část první

  2. Jak správně vyčistím data přijatá z textové oblasti při jejich výstupu zpět do textové oblasti?

  3. Jak vypočítat věk v MariaDB

  4. Funkce SYSDATE v Oracle