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

Python sqlite3中commit应调用自连接对象还是游标对象?

关于 SQLite3 中 commit 方法的正确选择

嘿,这个问题我刚接触sqlite3的时候也踩过坑!先给你明确结论:你应该用 con.commit(),cur.commit() 是错误的写法。

原因很简单:

  • 在Python官方的sqlite3库中,事务的管理是由连接对象(也就是你代码里的con)负责的,只有连接对象才有commit()方法。
  • 游标对象(cur)的作用只是执行SQL语句、查询结果,它根本没有commit()这个方法,如果你强行调用,运行时会直接抛出AttributeError。

至于《Practical Programming(第二版)》里出现cur.commit(),大概率是书中的笔误——毕竟书籍出版后,库的标准用法可能有更新,或者编写时的疏漏。而Python官方文档的说法是完全权威的,必须以它为准。

给你一个标准的正确操作流程参考:

import sqlite3
# 建立数据库连接
con = sqlite3.connect('stackoverflow.db')
# 创建游标用于执行SQL
cur = con.cursor()

# 举个例子:执行插入操作
cur.execute("INSERT INTO users (name) VALUES ('Alice')")

# 提交事务——必须用连接对象的commit方法
con.commit()

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

额外提一句:如果你需要自动提交事务,可以在创建连接时设置isolation_level=None,比如con = sqlite3.connect('stackoverflow.db', isolation_level=None),这种情况下就不用手动调用commit()了,但日常开发里还是建议手动提交,能更精准地控制事务的开始和结束。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:02:58