我正在为项目编写代码,当使用SQLite3时,我遇到了这个我似乎无法解决的错误。
之前我已经找到了答案,但似乎SQLite的一个例子似乎是将变量作为列标题读取,但是在这里它找不到的列不是一个我的变量让我有点迷失。
我正在尝试将变量中的数据插入到SQLite数据库中,虽然起初我有一个更简单的版本正常工作,现在我尝试将它集成到我的完整代码中,我再次陷入困境。
这是我试用并正确使用之前我试用的试用版:
c.execute("CREATE TABLE TEST (GIFNAME, TagStyle, TagEvent, TagTime)")
def SaveStyle():
if (GIFName.get() != "") and (TagStyle.get() != ""):
#print(GIFName.get(), ", ", TagStyle.get(), ", ", TagEvent.get(), ", ", TagTime.get())
#Saved1=tk.Label(window4, text="Saved!", fg="#ffffff", bg="#D0CEC2")
#Saved1.grid(row=9, column=1)
c.execute("INSERT INTO TEST VALUES (%s,%s,%s,%s)" %(GIFName2, TagStyle2, TagEvent2, TagTime2))
conn.commit()
c.execute("select * from TEST")
print(c.fetchall())
我知道代码不是很好,我对编码比较新,所以它并不完美,我只是希望修复一部分,因为它会用于相当的我程序的一小部分。
正在使用它抓取的4个变量,因为原始的变量是tk.StringVar()
而且sqlite不断回来说它们不受支持。
以下是完整的错误消息:
"Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python33\lib\idlelib\run.py", line 109, in main
seq, request = rpc.request_queue.get(block=True, timeout=0.05)
File "C:\Python33\lib\queue.py", line 175, in get
raise Empty
queue.Empty
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Python33\lib\tkinter\__init__.py", line 1475, in __call__
return self.func(*args)
File "N:\PYTHON\Alice Program\trial.py", line 16, in SaveStyle
c.execute("INSERT INTO TEST VALUES (%s,%s,%s,%s)" %(GIFName2, TagStyle2, TagEvent2, TagTime2))
sqlite3.OperationalError: no such column: PY_VAR0"
(抱歉,我必须将其格式化为代码,它不会让我将其作为报价发布)
最初我使用的是?
而不是%s
,但它一直说我的变量不受支持,而且朋友正在使用%s
并让它正常工作,但她无法使用记得她做了什么,现在她丢失了文件,所以我不能尝试用它来帮忙。
提前感谢您的帮助,如果我错过了任何信息,请与我们联系。
答案 0 :(得分:0)
INSERT INTO语句的语法不太正确。
应该是:
c.execute("INSERT INTO TEST VALUES (?,?,?,?)", (GIFName2, TagStyle2, TagEvent2, TagTime2))
问号(?)是python中sqlite的参数替换符号;使用它将确保您的数据安全地插入数据库 - 请参阅sqlite3 documentation。