2016-03-27 14 views
1

を評価しないPythonのsqlite3のラインが...私はどこかここでミスをしている必要がありますが、私はそれは、ひどく書き込みSQLを経験していない見つけることができません正しく

>>> db.c.execute('INSERT INTO {tn} ({c1n}, {c2n}) VALUES ({wn}, {f})'.\ 
... format(tn=db.table1, c1n=db.column1, c2n=db.column2, wn='someword', f=1)) 
それは私にこのトレースバックを与えている

...

Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
    sqlite3.OperationalError: no such column: someword 

'someword'は挿入する値でなければならず、探している列ではないでしょうか?あなたが値の前後に引用符欠けている

答えて

4

:サイドノートとして

INSERT INTO {tn} ({c1n}, {c2n}) VALUES ('{wn}', '{f}') 
            HERE^ 

を、あなたの書式文字列を経由してクエリを作るべきではない - それはあなたがSQL injection attacksにあなたのコードが脆弱になっている、安全ではありません型変換や引用符で問題を解決することができます(既に見ているように)。 parameterized queriesを使用してください。残念ながら、you cannot parameterize table and column namesとそれらを個別に検証する必要があります。列値のパラメータの代入を行うことができます。

db.c.execute('INSERT INTO {tn} ({c1n}, {c2n}) VALUES (:wn, :f)'.\ 
    format(tn=db.table1, c1n=db.column1, c2n=db.column2), {'wn': 'someword', 'f': 1}) 
関連する問題

 関連する問題