即使没有语法错误,Sqlite仍提示语法错误。求助?

1 投票
2 回答
1463 浏览
提问于 2025-04-17 06:52

这是我用来更新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注入攻击。


注意,如果proxydescription里面有单引号,那么你需要对它进行转义。你手动构建的SQL语句没有正确处理这种引号,这可能就是你看到的语法错误的原因。


补充:正如其他人提到的,语法错误的真正来源是UPDATE ... VALUES ... WHERE在(sqlite) SQL中是不合法的。正确的UPDATE语法是UPDATE ... SET ... WHERE,你可以查看这个链接了解更多信息。

撰写回答