2016-03-14 108 views
0

我在写代码的项目,并使用SQLite3的,当我遇到这个错误,我似乎无法修复来了。sqlite3.OperationalError:没有这样的列:PY_VAR0

我之前抬头的答案,但它似乎总是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

您是否试过在本网站搜索“PY_VAR0”?这种问题出现很多,而且总是出于同样的原因。 –

回答

0

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

它应该是:(?)

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

问号为在python源码参数替换符号;使用这将确保您的数据安全地插入到数据库中 - 请参阅sqlite3 documentation

+0

这让它来保存一些东西,所以谢谢,但如果我强迫它读取变量作为字符串,它只是说它们是“Py_Var0”1,2,3,但如果我不强迫它读取它们作为字符串,它表示他们'可能不支持' –

+0

正如@BryanOakley在他的评论中建议的,看看像http://stackoverflow.com/questions/24768455/tkinter-intvar-returning-py-var0-instead-of-值 - 您可能需要在要保存的变量上调用.get(),以获取它们的值,例如GifName2.get()而不仅仅是GifName2。 – snakecharmerb

+0

是的,我刚刚尝试过,现在正在工作,所以谢谢你:) –

相关问题