sqlite3.OperationalError:没有这样的列:PY_VAR0

时间:2016-03-14 10:07:46

标签: python python-3.x sqlite

我正在为项目编写代码,当使用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并让它正常工作,但她无法使用记得她做了什么,现在她丢失了文件,所以我不能尝试用它来帮忙。

提前感谢您的帮助,如果我错过了任何信息,请与我们联系。

1 个答案:

答案 0 :(得分:0)

INSERT INTO语句的语法不太正确。

应该是:

c.execute("INSERT INTO TEST VALUES (?,?,?,?)", (GIFName2, TagStyle2, TagEvent2, TagTime2))

问号(?)是python中sqlite的参数替换符号;使用它将确保您的数据安全地插入数据库 - 请参阅sqlite3 documentation