即使没有语法错误,Sqlite语法错误。救命?

时间:2011-11-22 20:27:37

标签: python sqlite syntax

以下是我用来更新sqlite数据库中信息的代码:

self.c.execute("UPDATE proxydata (proxy, description) VALUES ('" + proxy + "', '" + description + "') WHERE proxy='" + proxy + "'")

但是我收到了这个错误:

sqlite3.OperationalError: near "(": syntax error

对于我的生活,我找不到错误。执行时的两个变量都是正确格式化的字符串。

编辑:

这很好用:

self.c.execute("UPDATE proxydata SET description='" + description + "' WHERE proxy='" + proxy + "'")

您可以关闭该主题。

2 个答案:

答案 0 :(得分:6)

使用参数化的sql:

sql='UPDATE proxydata SET description = ? WHERE proxy = ?'
args=[decription,proxy]
self.c.execute(sql,args)

这显然更容易,因为您不必自己引用参数,因此不易出错。 它也更安全,因为参数化sql允许sqlite3防止sql注入。


请注意,如果proxydescription本身包含单个引号,则需要对其进行转义。您手动构造SQL语句不能正确地转义该类型的引号。这可能是您看到的语法错误的原因。


编辑:正如其他人所说,语法错误的真正来源只是UPDATE ... VALUES ... WHERE无效(sqlite)SQL。 proper UPDATE syntaxUPDATE ... SET ... WHERE

答案 1 :(得分:3)

没有语法错误就没有语法错误。试试这个:

self.c.execute("UPDATE proxydata SET proxy='" + proxy + "', description='" + description + "' WHERE proxy='" + proxy + "'")

此处描述了此语法:http://www.sqlite.org/lang_update.html