以前,MySQLdb连接是上下文管理器。从2018
年12月4日提交该内容开始,MySQLdb连接不再是上下文管理器,用户必须显式调用conn.commit()或conn.rollback()或编写自己的上下文管理器,例如下面的一个。
您可以使用如下形式:
import configimport MySQLdbimport MySQLdb.cursors as mcimport _mysql_exceptionsimport contextlibDictCursor = mc.DictCursorSSCursor = mc.SSCursorSSDictCursor = mc.SSDictCursorCursor = mc.Cursor@contextlib.contextmanagerdef 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.contextmanagerdef 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变量。



