python-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 + "'")

您可以关闭线程.

解决方法:

使用参数化的sql:

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

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

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

编辑:正如其他人所指出的,语法错误的真正原因仅仅是UPDATE … VALUES … WHERE是无效的(sqlite)SQL. proper UPDATE syntax是UPDATE … SET … WHERE.

上一篇:Linux prognam是否有标准语法?


下一篇:java-Eclipse项目错误