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

Контекстният мениджър за MySQLdb на Python

Предишно , MySQLdb връзките бяха контекстни мениджъри. От ааа a> , обаче, MySQLdb връзките вече не са контекстни мениджъри и потребителите трябва изрично да извикат conn.commit() или conn.rollback() или да напишат свой собствен контекстен мениджър, като този по-долу.

Можете да използвате нещо подобно:

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)

За да го използвате, трябва да поставите config.py във вашия PYTHONPATH и дефинирайте променливите 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. Командата Mysql не е намерена в OS X 10.7

  2. стойност по подразбиране на GUID в за колона в mysql

  3. Доктрина - Как да разпечатате истинския sql, а не само подготвеното изявление?

  4. Пълно възстановяване на MySQL или MariaDB Galera клъстер от архивиране

  5. MYSQL:Как мога да намеря „дата от миналия понеделник“ (проблем с производителността)