2016-10-04 3 views
0

내가 가진 :sqlite3 데이터베이스를 "?"로 업데이트하십시오. - 파이썬

데이터베이스 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

오류 메시지가 무엇입니까? 그것은 두 개의 매개 변수를 삽입했기 때문입니까, 그러나'execute'는 오직 하나만 기대합니다? – 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

예. 정확합니다. 고맙습니다. –

관련 문제