连接与事务


connection = pymysql.connect(
    host='10.201.10.253',
    user='bigdata',
    password='bigdata',
    db='test',
    charset='utf8mb4',
    cursorclass=pymysql.cursors.DictCursor,
    autocommit=True,  # 自动提交模式下,每个查询都是一个独立的事务
    isolation_level='READ COMMITTED'  # 设置隔离级别
)

一个大坑: connection 如果 未配autocommit(即False),查询时未开启事务,而且共用同一个连接,会导致查询缓存。也就是你查询一个表,再改了数据表的内容,再次查询还是原来的旧数据。

执行SQL

try:
    with connection.cursor() as cursor:
        # 开始事务(可选,因为默认情况下操作就在一个隐式的事务中)
        connection.begin()

        # 执行SQL语句
        sql = "select * from room"
        cursor.execute(sql)
        data = cursor.fetchone()
        print("Database version : %s " % data)
        # 如果一切正常,提交事务
        connection.commit()
except Exception as e:
    # 发生错误时,回滚事务
    connection.rollback()
    print(f"An error occurred: {e}")
finally:
    # connection.close()
    print("")