Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Trình quản lý ngữ cảnh cho MySQLdb của Python

Trước đây , Các kết nối MySQLdb là trình quản lý ngữ cảnh. Như cam kết này vào ngày 2018-12-04 tuy nhiên, các kết nối MySQLdb không còn là trình quản lý ngữ cảnh và người dùng phải gọi conn.commit () hoặc conn.rollback () một cách rõ ràng hoặc viết trình quản lý ngữ cảnh của riêng họ, chẳng hạn như trình quản lý ngữ cảnh bên dưới.

Bạn có thể sử dụng một cái gì đó như thế này:

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)

Để sử dụng nó, bạn sẽ đặt config.py trong PYTHONPATH của bạn và xác định các biến 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 Sắp xếp theo một số, Chuỗi trống (hoặc 0 của) Cuối cùng

  2. MySQL - Giá trị của 1 trong DECIMAL (2, 2) sắp ra mắt là 0,99

  3. MySQL:không có trong GROUP BY

  4. Cách giám sát tổng hợp kết nối cho .NET MySQL Data Connector trong IIS

  5. Truy vấn Chọn nhóm theo ký tự cuối cùng trong trường