2017-11-04 3 views
0

두 SQLite 쿼리를 결합하는 방법을 알아 내려고하고 있습니다. 두 가지 모두 독립적으로 작동하지만 AND과 함께 사용하면 작동하지 않습니다. 문제는 변수를 적절하게 전달하는 방법을 모른다는 것입니다. 작동 첫 번째 쿼리 :Python을 사용하여 SQLite에서 변수 대체

var1 = 10 
mylist = ['A', 'B', 'C', 'AB', 'AC'] 
c.execute("SELECT * FROM my_table WHERE column1=(?) ORDER BY RANDOM() LIMIT 1", (mylist[2],)) 

이 줄은 또한 작동합니다

params = [5,0,1] 
query = ("SELECT * FROM my_table WHERE column2 NOT IN (%s)" % ','.join('?' * len(params))) 
c.execute(query, params) 

내가 성공하지 않고 다음 두 문장을 결합하는 시도하고있다는 : 경우 사람에

query = ("SELECT * FROM my_table WHERE column2 NOT IN (%s) AND column1=(?)" % ','.join('?' * len(params))) 
c.execute(query, params, mylist[2]) 

이 정보가 도움이 발견 내 마지막 해결책은 다음과 같습니다.

query = ("SELECT * FROM my_table WHERE column1 = (?) AND column2 NOT IN (%s) ORDER BY RANDOM() LIMIT 1" % ','.join('?' * len(params))) 
    c.execute(query, [mylist[2]] + params) 

답변

2

execute()의 두 번째 매개 변수는 모든 SQL 매개 변수를 포함하는 시퀀스 여야합니다.

c.execute(query, params + [list[2]]) 
+0

감사 :

그래서 당신은 모두 원래의 목록에서 값을 하나의 목록을 구성해야합니다. 완벽하게 일했습니다. 실수가 내 쿼리의 형식을 지정하는 방식 이었기 때문에 이전 주석을 삭제했습니다. 위의 질문을 올바르게 조정하여 형식을 올바르게 지정합니다. – tjohnson