2016-10-04 3 views
0

私が持っている:sqlite3データベースに "?" - pythonの

データベースtesting.db3に テーブル:mytableは コラム: '名前'、 'ステータス'

私は:

con = sqlite3.connect('testing.db3') 
cur = con.cursor() 
cur.execute('select * from mytable where status is null') 

data = cur.fetchone() 
print(data[0]) 

を私は次の結果を受け取りたかったよう私がしなければ

('Johnny', 'None') 

今、私はこの行を更新しようとしています、それは動作します:

cur.execute('UPDATE mytable SET status = "Online" WHERE name is "Johnny"') 

しかし、「?」で更新したい場合は、機能しません。どんな考え?

cur.execute('UPDATE mytable SET status = "Online" WHERE name is ?', data[0]) 
con.commit() 
con.close() 

助けていただければ幸いです。ありがとうございました。

+0

エラーメッセージは何ですか?これは2つのパラメータを挿入するためですが、 'execute'は1つしか期待していませんか? – imant

+0

"sqlite3.ProgrammingError:指定されたバインディングの数が正しくありません。タプルの最初の値であるdata [0]を選択しました。 –

+0

'data [0]'の値が "Johnny"であるということですか?私が間違っているなら私を訂正してください。 – imant

答えて

2
cur.execute('UPDATE mytable SET status = "Online" WHERE name is ?', (data[0],)) 

execute入力パラメータとしてタプルが必要です。したがって、単一の値だけを挿入したとしても、それをタプルとしてフォーマットする必要があります。

あなたの質問では、data[0] = ('Johnny', 'None')と言っていますが、コメントでは、data[0]がタプルの最初の値であることを示しています。だから私は後者の場合を想定しています。

+0

はいこれが正しいです。どうもありがとうございました。 –

関連する問題