0

当我尝试使用元组中的字符串值作为我的 executemany() 命令中的列名时,如下所示:

tup = ('field', 'value',)

cursor.executemany('UPDATE table SET ?=?', tup)

我得到一个 SQlite.operationalerror:

   c.executemany('''UPDATE table SET ?=?''', tup)
sqlite3.OperationalError: near "?": syntax error

什么时候不能在'='之前和之后才插入元组值?

4

1 回答 1

4

因为 SQL 参数表示一个文字值,需要引用以保护它不被解释为 SQL 表或列名或文字。

换句话说,您的field价值将被引用:

UPDATE table SET "field"="value"

代替

UPDATE table SET field="value"

您必须自己清理值field以确保它只包含一个字段名称,然后自己插入它:

'UPDATE table SET %s=?' % ('field',)

消毒是一个难题;您也许应该使用像SQLAlchemy这样的框架来以理智的方式为您生成 SQL。

于 2012-11-07T10:39:08.063 回答