【问题标题】:Sqlite syntax error even though there's no syntax error. Help?Sqlite 语法错误,即使没有语法错误。帮助?
【发布时间】:2011-11-22 20:27:36
【问题描述】:

这是我用来更新我的 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。

标签: python sqlite syntax


【解决方案1】:

使用参数化的 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

【讨论】:

    【解决方案2】:

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

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

    这里描述了这个语法:http://www.sqlite.org/lang_update.html

    【讨论】:

      猜你喜欢
      • 2011-05-12
      • 2012-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多