在使用 Python 连接 MySql
数据库
时,当使用连接池方法执行 update 语句时,有时会出现修改不生效的情况,即 update 后数据未被更新到
数据库
中。这是因为对于连接池中的连接对象,需要手动提交事务。
解决该问题的主要方式是,在执行修改操作后,需要执行
数据库
事务提交操作,即使用 commit() 方法将修改结果提交到
数据库
中。
下面是一个示例代码:
import pymysql
from DBUtils.PooledDB import PooledDB
# 创建一个 MySql 连接池
pool = PooledDB(
creator=pymysql,
host='localhost',
port=3306,
user='root',
password='',
database='test_db',
charset='utf8mb4',
maxconnections=10
# 获取一个连接对象
conn = pool.connection()
cursor = conn.cursor()
# 执行 update 操作
cursor.execute("update test_table set name='new_name' where id=1")
conn.commit()
except Exception as e:
print(e)
conn.rollback()
# 关闭连接
cursor.close()
conn.close()
在该代码中,我们通过导入 pymysql 模块和 DBUtils 中的 PooledDB 类来创建一个 MySql 连接池,并获取一个连接对象执行 update 操作。在执行语句后,通过 try/except 块判断是否执行成功,如果成功则执行 commit 操作提交结果到数据库,否则执行 rollback 方法回滚操作。最后,关闭连接对象即可。
这样,在使用连接池执行 update 操作时,就可以避免修改不生效的问题。