Python | SQLite3:在connect或游标上使用commit吗?

Python | SQLite3:在connect或游标上使用commit吗?,python,python-3.x,sqlite,commit,Python,Python 3.x,Sqlite,Commit,我正在通过一本名为《实用编程:第二版》的书学习python和sqlite3。 在书本身中,它有冲突的代码 如果这是我的代码的开始: import sqlite3 con = sqlite3.connect('stackoverflow.db') cur = conn.cursor() 要提交,我会使用con.commit()还是cur.commit()。还是有不同的时间使用不同的 以下是书中的图片: 这显示con.commit() 这显示cur.commit() 我在线查看并显示con

我正在通过一本名为《实用编程:第二版》的书学习python和sqlite3。 在书本身中,它有冲突的代码

如果这是我的代码的开始:

import sqlite3

con = sqlite3.connect('stackoverflow.db')

cur = conn.cursor()
要提交,我会使用con.commit()还是cur.commit()。还是有不同的时间使用不同的

以下是书中的图片:

这显示con.commit()

这显示cur.commit()

我在线查看并显示con.commit()

只是想确定这本书在使用
cur.commit()
时是否有错误,或者使用它是否有特殊条件

提前感谢

con.commit()
conn.commit()
是一样的。。。它们是创建的对象类型。。。在这两种情况下,它们都以其他方式命名。。。重要的是
.commit()
,而不是程序员指定的命名

有一些对象类型使用不同的名称(con和cur-如您所要求)来调用该方法。您还可以在代码中使用其他名称,例如:

db = sqlite3.connect('/tmp/filename.db')
cursor = db.cursor()
cursor.execute("CREATE TABLE ....
               .... some DB-API 2.0 commands ....
               ")
db.commit()
请再次查看网页。 您忘记从网页复制以下两行内容:

import sqlite3
conn = sqlite3.connect('example.db')
然后继续代码(只是复制了它):


我接受了联合国大学的建议,自己尝试了一下

示例代码:

import sqlite3

con = sqlite3.connect('db.db')
cur = con.cursor()

data = [('data', 3), ('data2', 69)]

cur.execute('CREATE TABLE Density(Name TEXT, Number INTEGER)')

for i in data:
    cur.execute('INSERT INTO Density VALUES (?, ?)', (i[0], i[1]))

cur.commit()
PyCharm跑步:

Traceback (most recent call last):
  File "/Users/User/Library/Preferences/PyCharmCE2018.1/scratches/scratch_2.py", line 13, in <module>
    cur.commit()
AttributeError: 'sqlite3.Cursor' object has no attribute 'commit'
回溯(最近一次呼叫最后一次):
文件“/Users/User/Library/Preferences/PyCharmCE2018.1/scratches/scratch_2.py”,第13行,在
cur.commit()
AttributeError:'sqlite3.Cursor'对象没有属性'commit'
教科书上的错误<代码>cur.commit()不存在


感谢unutbu和s3n0,我认为如果您使用指定的游标提交更改,在您的情况下,应该是cur.connection.commit()。 无论代码名为db、con还是conn,您都可以在代码末尾使用connect进行提交。
但是当代码变得复杂时,您将使用不同的函数对数据库执行某些操作,如果您只使用连接提交,当出现错误时,您将很难找到哪个函数失败。因此,您可以为特定操作创建特定光标,当该操作失败时,回溯消息将显示错误时的特定光标。

您是否尝试过该代码?你发现了什么?最好的建议。我是编程新手,所以我总觉得如果我写错了代码,我会把事情搞砸:)cur.commit不起作用。我将发布一个详细的解决方案。谢谢你帮我了解更多:)我在比较cur。commit()vs con/conn.commit()对不起,但在你的问题中,并不是全部来自教育书籍的代码。在第二张图中,可能有错误,而你可能是对的。游标提交是一个错误,我认为。。。可以提交sqlite3数据库对象,而不是游标。请看这里:游标没有名为.commit的对象。但对于连接来说,它是存在的。
Traceback (most recent call last):
  File "/Users/User/Library/Preferences/PyCharmCE2018.1/scratches/scratch_2.py", line 13, in <module>
    cur.commit()
AttributeError: 'sqlite3.Cursor' object has no attribute 'commit'