You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python SQLite3:cursor与connection执行UPDATE语句的差异问题

嘿,我来帮你捋捋这个问题!你遇到的con.execute()能成功写入但c.execute()不行的情况,大概率是事务提交机制在搞鬼,咱们一步步拆解清楚:

问题根源

在Python操作数据库的逻辑里:

  • 连接对象(con)的execute方法,部分数据库驱动(比如SQLite)会隐式帮你完成事务提交;
  • 而游标对象(c)执行SQL后,默认不会自动提交事务——数据库会把你的修改暂存起来,直到你手动触发提交,才会真正写入磁盘。

这就是为什么两种执行方式会有差异的核心原因。

快速修复方案

如果你想用游标c.execute()成功完成写入,只需要补上事务提交的步骤就行,给你两种常见的处理方式:

方式1:手动提交事务

执行完SQL后,调用连接对象的commit()方法:

# 假设你的原有代码框架
import sqlite3

con = sqlite3.connect("your_db.db")
c = con.cursor()

# 执行UPDATE语句
c.execute("UPDATE your_table SET column = 'new_value' WHERE id = 1")

# 关键:手动提交事务!
con.commit()

# 用完记得关闭资源
c.close()
con.close()

方式2:开启自动提交

如果希望每次游标执行后自动提交,可以在创建连接时开启自动提交模式(不同数据库的设置方式略有区别):

# SQLite的自动提交设置(isolation_level设为None)
con = sqlite3.connect("your_db.db", isolation_level=None)
c = con.cursor()

# 此时执行UPDATE后无需手动commit
c.execute("UPDATE your_table SET column = 'new_value' WHERE id = 1")
额外注意事项
  • 如果执行过程中出现错误,记得用con.rollback()回滚事务,避免留下脏数据;
  • 不是所有数据库的连接对象execute都会自动提交,比如MySQL默认就不会,所以养成手动提交的习惯更稳妥。

内容的提问来源于stack exchange,提问作者csf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:16:02