使用参数字符串时出现SQLite 3错误,但隐式键入时不发生

时间:2019-03-23 03:45:52

标签: python-2.7 sqlite

我有一个来自python 2.7程序的代码片段:

cur.execute("UPDATE echo SET ? = ? WHERE ID = ?", (cur_class, fdate, ID,))

运行时不断抛出以下错误:

sqlite3.OperationalError: near "?": syntax error

该程序应该将今天的日期插入与提供的学生ID匹配的班级列中。如果我删除第一个“?”像这样并硬编码参数:

cur.execute("UPDATE echo SET math = ? WHERE ID = ?", (fdate, ID,))

一切正常。我到处搜寻Google,但尚未找到任何有效的方法,因此我丢掉了生命线。 我试过单引号,双引号,带或不带括号以及其他一些我现在不记得的东西。到目前为止,除了对第一个参数进行硬编码之外,其他任何方法都行不通。

作为故障排除步骤,我让程序打印每个变量的type(),它们都是字符串。 cur_class字段的数据类型为VARCHAR,fdate为DATE,ID为VARCHAR。

1 个答案:

答案 0 :(得分:0)

感谢@Shawn的技巧,我使用以下代码解决了该问题,并且效果很好:

sqlcommand = "UPDATE echo SET " + cur_class + " = " + fdate + " WHERE ID = " + ID cur.execute(sqlcommand)

通过这种方式,python进行了繁重的工作,并使用所有扩展的变量构造了我的字符串,然后让数据库执行格式正确的SQL命令。