2016-12-07 31 views
0

最初に、同様のタイトルの記事が既にあることを知っていますが、これらの質問に対する回答を見ていますが、 。 (私の問題は残りの部分とは若干異なります)。sqlite3.OperationalError:認識されないトークン: "{"

私のsqliteデータベース内の特定のレコードのフィールドの値を更新できる必要があります。私がこの問題を解決するのに使った投稿の1つはthisです。

私はここに私のコードで同じ書式を使用しています

updateCustomerTable = c.execute("UPDATE customerTable SET {} = ? WHERE customerID = ?").format(age), (newAge.get(),) , (customerID.get(),) 

が、私はエラーメッセージ取得しています:開発者がそれを使用したときに

sqlite3.OperationalError: unrecognized token: "{" 

はなぜカーリーブラケットが許可されていませんが他の投稿の回答では?ここで

答えて

2

(コードが読みやすくするために再フォーマット):

c.execute(
    "UPDATE customerTable SET {} = ? WHERE customerID = ?" 
    ).format(age) 

はそう実際にあなたがc.execute()の結果ではなく、自分のSQLクエリ文字列に.format()を呼び出しています。クエリが有効なSQL FWIWだった場合は、実際にはAttributeErrorになります。

何が欲しいのです:

sql = "UPDATE customerTable SET {} = ? WHERE customerID = ?".format(age) 
c.execute(sql, ...) 
+0

私は実行ラインに結果を取得することで、引数を入れているので、c.execute(SQL、(newAge.get()、)、(得意先。 get()、)))しかし、それは2が与えられている3つの引数があることを意味しますか?私はその行に何か他のものを置くはずですか? – JoeW373

+0

この質問は解決しましたか?前述のように、 '.format()'メソッドは、追加の引数でリストまたはタプルのいずれかとして渡されるクエリパラメータを含む文字列ステートメントで操作する必要があります。 – Parfait