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 ở đó.