2011-11-22 3 views
1

여기 내 sqlite가 데이터베이스에서 정보를 업데이트하는 데 사용하는 코드입니다 :구문 오류가 없더라도 Sqlite 구문 오류가 발생합니다. 도움?

self.c.execute("UPDATE proxydata (proxy, description) VALUES ('" + proxy + "', '" + description + "') WHERE proxy='" + proxy + "'") 

을하지만이 오류 얻을 : 나는 오류를 찾을 수없는 광산의 수명을

sqlite3.OperationalError: near "(": syntax error 

합니다. 실행시 두 변수 모두 올바르게 형식화 된 문자열입니다.

편집 :이 제대로 작동

:

self.c.execute("UPDATE proxydata SET description='" + description + "' WHERE proxy='" + proxy + "'") 

당신은 스레드를 닫을 수 있습니다. 당신이 인수를 직접 인용해야하고, 따라서하지 않기 때문에

sql='UPDATE proxydata SET description = ? WHERE proxy = ?' 
args=[decription,proxy] 
self.c.execute(sql,args) 

이것은 분명히 쉽게 적은 오류가 발생하기 쉬운 :

+0

실행하고 값의 덤프를 전달하기 전에 SQL 문자열을 구축합니다. 그런 다음 실제 가치를 확인하고 여전히 괜찮은지 확인하십시오. 그렇다면 생성 된 SQL을 표시하십시오. – Achim

답변

6

는 매개 변수화 SQL을 사용합니다. sqlite를 매개 변수화하면 sqlite3을 보호 할 수 있으므로 더 안전합니다.

자체가 작은 따옴표가 들어 주 proxy 또는 description 경우

, 그것은 이스케이프해야합니다. SQL 문의 수동 작성이 해당 유형의 따 H 표를 제대로 벗어나지 않습니다. 보고있는 구문 오류의 원인 일 수 있습니다.


편집 : 다른 사람이 언급했듯이, 구문 오류의 실제 소스가 UPDATE ... VALUES ... WHERE이 유효 (SQLite는) SQL 아니라고 간단하다. proper UPDATE syntaxUPDATE ... SET ... WHERE입니다.

+0

팁 주셔서 감사. –

3

구문 오류가없는 구문 오류는 없습니다. 이 시도 :

self.c.execute("UPDATE proxydata SET proxy='" + proxy + "', description='" + description + "' WHERE proxy='" + proxy + "'") 

이 구문이 여기에 설명되어 있습니다 : http://www.sqlite.org/lang_update.html

+0

감사합니다. 이것은 잘 작동합니다. –

관련 문제