2015-09-24 21 views
1

的Python 3 + Tkinter的和sqlite3的sqlite3.OperationalError ...我的sqlite语法有什么问题?

我在做一个模拟的应用程序保存在sqlite的

这里一段文本的功能:

def saveNote(self,note_id): 

    conn = db.connect(fname) 
    c = conn.cursor() 
    safeTitle=self.newNoteTitle.get() 
    safeContents=self.newNoteText.get("1.0",tk.END) 
    safeLink=self.newNoteLink.get() 
    safeRemarks=self.newNoteRemarks.get() 
    conn.execute('UPDATE notes SET (title,contents,remarks,link,created,last_modified,notebook_id) VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, ?) WHERE notes_id=5', (safeTitle, safeContents, safeRemarks, safeLink, 1)) 
    conn.commit() 
     self.master.destroy() 

当执行功能时,我得到这个错误:

conn.execute('UPDATE notes SET (title,contents,remarks,link,created,last_modified,notebook_id) VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, ?) WHERE notes_id=5', (safeTitle, safeContents, safeRemarks, safeLink, 1)) 
sqlite3.OperationalError: near "(": syntax error 

我不明白为什么语法是错误的...(我是新来的Python)...谁能帮助我发现错误了吗?

谢谢

+0

SQLite的语法图是非常有帮助的:例如,https://sqlite.org/lang_update.html和https://sqlite.org/lang_insert.html –

+0

感谢您的链接,但我已经阅读并我的语法看起来好吗? –

+0

您的语法有缺陷。 “VALUES”这个词不会出现在这个语法图的任何地方:https://sqlite.org/lang_update.html也不是'('或')'。 –

回答

2

我不认为你的SQL语句是正确的。从你说明的你正在寻找插入数据到你的表中,所以你想实际使用INSERT语句而不是UPDATE。我想你可能想这样做,而不是:如果您实际上希望更新现有的数据,那么你的语法应该是这样的

INSERT INTO notes(title,contents,remarks,link,created,last_modified,notebook_id) 
VALUES(INSERT_THE_VALUES_YOU_WANT_TO_INSERT_HERE) 

只需填写""你想要的值设置

UPDATE notes 
SET 
title = "", 
contents = "", 
remarkts = "", 
link = "", 
created = "", 
last_modified = "", 
notebook_id = "" 
WHERE notes_id=5 

要删除与我所提供的查询的任何困惑,你想你的Python内构建您的查询是这样的:

conn.execute('UPDATE notes SET title=?,contents=?,remarks=?,link=?,created=?,last_modified=?,notebook_id=? 
WHERE notes_id=5', (safeTitle, safeContents, safeRemarks, safeLink, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 1)) 
+0

实际上,我更新现已存在的note..hence为何“硬编码” note_id(我试图调试它) –

+0

那么你更新语法不正确。我会更新我的答案。 – idjaw

+0

在这种情况下,我不会使用参数,暴露我的代码sql注入! –