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
相关产品推荐
相关产品推荐

