Python | SQLite3:在connect或游标上使用commit吗?
我正在通过一本名为《实用编程:第二版》的书学习python和sqlite3。 在书本身中,它有冲突的代码 如果这是我的代码的开始: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
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'