2016-05-16 7 views
1

Track TableからTrackIdのUnitPriceを更新しようとしています。 UnitPriceとTrackIdにはユーザー入力によって引数が与えられます。私は現在、引数の数にエラーが発生します:ここで複数のプレースホルダーSQLite Pythonが動作しない

Traceback (most recent call last): 
    File "HW4.py", line 48, in <module> 
    conn.execute("UPDATE Track set UnitPrice = ? WHERE TrackId = ?", (n_price,t_id)) 
    sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type. 

は私のコードです:

track_id = raw_input('Enter Track ID\n') 
t_id = (track_id,) 
cur = conn.execute("SELECT T.UnitPrice FROM Track T WHERE T.TrackId = ?", t_id) 
for row in cur: 
    print "Unit Price: ", row[0] 

new_price = raw_input('Enter New Price\n') 
n_price = (new_price,) 
conn.execute("UPDATE Track set UnitPrice = ? WHERE TrackId = ?", n_price, t_id) 
conn.commit 
print "Total number of rows updated: ", conn.total_changes 

cur = conn.execute("SELECT T.UnitPrice FROM Track T WHERE T.TrackId = ?", t_id) 
for row in cur: 
    print "Unice Price: ", row[0] 

私はそれは私がにn_priceとt_idを入れていますどのように構文エラーです推測していますか?プレースホルダ。

+0

あなたのトレースバックメッセージがあなたの投稿コードが一致しません使用:1組で一緒にあなたの引数で

パス。 –

答えて

1

、ネストされたタプルあなたはリストやタプルのように、単一反復可能としてあなたのパラメータを渡す必要がありますが、あなたは別にごn_priceパラメータをラップしている:だから

n_price = (new_price,) # this is a tuple 
conn.execute("UPDATE Track set UnitPrice = ? WHERE TrackId = ?", 
      (n_price, t_id)) # wrapping in another tuple 

今を((new_price,), t_id)を渡していますが、最初のタプルはサポートされていません。

params = (new_price, t_id) 
conn.execute("UPDATE Track set UnitPrice = ? WHERE TrackId = ?", params) 

または

conn.execute("UPDATE Track set UnitPrice = ? WHERE TrackId = ?", (new_price, t_id)) 
+0

クイックレスポンス。修正された問題。素晴らしい説明。素晴らしいです。 –

関連する問題