即使没有语法错误,Sqlite仍提示语法错误。求助?
这是我用来更新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 个回答
3
没有所谓的“没有语法错误的语法错误”。你可以试试这个:
self.c.execute("UPDATE proxydata SET proxy='" + proxy + "', description='" + description + "' WHERE proxy='" + proxy + "'")
这个语法的详细说明可以在这里找到:http://www.sqlite.org/lang_update.html
6
使用参数化的SQL:
sql='UPDATE proxydata SET description = ? WHERE proxy = ?'
args=[decription,proxy]
self.c.execute(sql,args)
这样做明显更简单,因为你不需要自己去加引号,这样出错的可能性就小了很多。它也更安全,因为参数化的SQL可以让sqlite3防止SQL注入攻击。
注意,如果proxy
或description
里面有单引号,那么你需要对它进行转义。你手动构建的SQL语句没有正确处理这种引号,这可能就是你看到的语法错误的原因。
补充:正如其他人提到的,语法错误的真正来源是UPDATE ... VALUES ... WHERE
在(sqlite) SQL中是不合法的。正确的UPDATE语法是UPDATE ... SET ... WHERE
,你可以查看这个链接了解更多信息。