我正在通过一本名为Practical Programming:2nd Edition的书来学习python和sqlite3。 在本书中,它有相互冲突的代码。
如果这是我的代码的开头:
import sqlite3
con = sqlite3.connect('stackoverflow.db')
cur = conn.cursor()
要提交,我会使用con.commit()还是cur.commit()。或者使用不同的时间有不同的时间吗?
这是图书中的图片:
我在https://docs.python.org/3/library/sqlite3.html在线查看并显示con.commit()
只是想确定这本书是否有使用cur.commit()
的错误,或者是否有特殊条件才能使用它。
提前致谢
答案 0 :(得分:1)
con.commit()
和conn.commit()
是相同的...它们是创建的对象类型...在这两种情况下它们都被命名为... important主要是.commit()
而不是命名程序员指定了
有些对象类型使用不同的名称(con和cur - 如你所知)来调用方法。您还可以在代码中使用其他名称,例如:
db = sqlite3.connect('/tmp/filename.db')
cursor = db.cursor()
cursor.execute("CREATE TABLE ....
.... some DB-API 2.0 commands ....
")
db.commit()
请再次检查网页https://docs.python.org/3/library/sqlite3.html。 你忘了从网页上复制这两行:
import sqlite3
conn = sqlite3.connect('example.db')
然后继续代码(只是复制它):
c = conn.cursor()
# Create table
c.execute('''CREATE TABLE stocks
(date text, trans text, symbol text, qty real, price real)''')
# Insert a row of data
c.execute("INSERT INTO stocks VALUES ('2006-01-05','BUY','RHAT',100,35.14)")
# Save (commit) the changes
conn.commit()
# We can also close the connection if we are done with it.
# Just be sure any changes have been committed or they will be lost.
conn.close()
答案 1 :(得分:1)
我接受了unutbu的建议,并亲自尝试过。
示例代码:
public static string GetDateString(DateTime inputDate)
{
var dateDiff = (DateTime.Today - inputDate.Date).TotalDays;
if (dateDiff == 0)
{
return "TODAY";
}
else if(dateDiff == 1)
{
return "YESTERDAY";
}
else if(dateDiff == -1)
{
return "TOMORROW";
}
else
{
return inputDate.ToShortDateString();
}
}
PyCharm Run:
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()
教科书出错。 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'
不存在。
感谢unutbu和s3n0
答案 2 :(得分:0)
我认为,如果您使用指定的游标提交更改,则应为cur.connection.commit()。 无论代码名为db还是con或conn,您始终可以使用connect在代码末尾提交。 但是,当您的代码变得复杂时,您将具有不同的功能来对数据库执行某些操作,如果仅使用连接提交,则当存在错误时,您将很难找到哪个函数失败。因此,您将为特定的操作创建特定的游标,如果操作失败,则回溯消息将向您显示错误时哪个特定的游标。