[PYTHON] WHERE ___ IN ___ 문 사용
PYTHONWHERE ___ IN ___ 문 사용
WHERE _ IN _ 문을 올바르게 사용하는 방법을 찾으려고합니다.
정의:
c.execute('''CREATE TABLE IF NOT EXISTS tab (
_id integer PRIMARY KEY AUTOINCREMENT,
obj text NOT NULL
) ;''')
나는 이런 식으로하려고합니다.
list_of_vars=['foo','bar']
statement="SELECT * FROM tab WHERE obj IN (?)"
c.execute(statement,"'"+"','".join(list_of_vars)+"'")
또는 위의 방법으로 직접 평가 한 결과도 시도해 보았습니다.
statement="SELECT * FROM tab WHERE obj IN (?)"
c.execute(statement,"'foo','bar'")
내가 얻는 오류는 다음과 같습니다.
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 9 supplied
이것은 나에게 오류를주고있다. 이 방법을 사용하면 작동하지만 SQL 주입 공격에 취약하기 때문에 권장하지 않습니다.
statement="SELECT * FROM tab WHERE obj IN ("+"'"+"','".join(statement)+"'"+")
해결법
-
==============================
1.vars 목록과 일치하는 충분한 매개 변수를 작성해야합니다.
vars 목록과 일치하는 충분한 매개 변수를 작성해야합니다.
statement = "SELECT * FROM tab WHERE obj IN ({0})".format(', '.join(['?'] * len(list_of_vars))) c.execute(statement, list_of_vars)
list_of_vars를 매개 변수 값 목록으로 전달한다는 점에 유의하십시오. ','.join ()을 사용하여 문자열을 생성합니까? 문자를 쉼표로 구분 한 다음 .format ()을 사용하여 명령문에 삽입하십시오.
긴 변수 목록의 경우 임시 테이블을 사용하여 이러한 값을 보유한 다음 바인드 매개 변수가있는 IN 절이 아닌 임시 테이블에 대해 JOIN을 사용하는 것이 더 효율적일 수 있습니다.
from https://stackoverflow.com/questions/14245396/using-a-where-in-statement by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] DataFrame을 처리 할 때 NLTK 기능이 느려지는 이유는 무엇입니까? (0) | 2018.10.15 |
---|---|
[PYTHON] 아름다운 스프 4 find_all은 아름다운 스프 3이 발견 한 링크를 찾지 못합니다. (0) | 2018.10.15 |
[PYTHON] Tkinter에 이미지를 표시 할 수 없음 [duplicate] (0) | 2018.10.15 |
[PYTHON] 왜 파이썬에서 중첩 목록의 한 요소 만 변경할 수 없습니까? [duplicate] (0) | 2018.10.15 |
[PYTHON] 그 값을 기반으로 배열의 누피 합계 요소 (0) | 2018.10.15 |