我有一个来自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。
答案 0 :(得分:0)
感谢@Shawn的技巧,我使用以下代码解决了该问题,并且效果很好:
sqlcommand = "UPDATE echo SET " + cur_class + " = " + fdate + " WHERE ID = " + ID
cur.execute(sqlcommand)
通过这种方式,python进行了繁重的工作,并使用所有扩展的变量构造了我的字符串,然后让数据库执行格式正确的SQL命令。