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 に答える