2015-01-10 2 views
3

나는 파이썬으로 목록을 가지고 있습니다.매개 변수 (목록 또는 배열)에 연산자 - python, SQL을 부여합니다.

article_ids = [1,2,3,4,5,6] 

I는 다음과 같이 SQL 문에이 목록을 사용해야합니다

SELECT id FROM table WHERE article_id IN (article_ids) 

가 어떻게 내 IN() 절에이 목록을 제공 할 수 있습니다 ?

나는 이미 인터넷 검색 방법을 시도했지만, 알아낼 수 없었다.

>> print ids_list 
    placeholders= ', '.join('?'*len(ids_list)) # "?, ?, ?, ... ?" 
    query = 'SELECT article_id FROM article_author_institution WHERE institution_id IN ({})'.format(placeholders) 
    print query 
    cursor.execute(query, ids_list) 

오류 메시지 내가 얻을 :

SELECT article_id FROM article_author_institution WHERE institution_id IN (?) 
    query = query % db.literal(args) 
    TypeError: not all arguments converted during string formatting 

예를 들어 :

ids_list = [9,10] 

placeholders= ', '.join('%'*len(ids_list)) # "?, ?, ?, ... ?" 
query = 'SELECT aid FROM article_author_institution WHERE instid IN ({})'.format(placeholders) 
print query 
cursor.execute(query, ids_list) 

출력 및 오류 메시지는 다음과 같습니다

SELECT aid FROM article_author_institution WHERE instid IN (%, %) 
Traceback (most recent call last): 
    File "deneme3.py", line 11, in <module> 
    cursor.execute(query, ids_list) 
    File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 159, in execute 
    query = query % db.literal(args) 
ValueError: unsupported format character ',' (0x2c) at index 61 
+2

가능한 중복 http://stackoverflow.com/questions/283645/python- list-in-sql-query-as-parameter) – ksindi

답변

5

아이디어가있는이다 다음과 같은 검색어 :

cursor.execute("SELECT ... IN (%s, %s, %s)", (1, 2, 3)) 

%s은 목록의 요소로 대체됩니다. 이 문자열 쿼리를 생성하기 위해 당신이 할 수 있습니다 : 마지막으로

placeholders= ', '.join(['%s']*len(article_ids)) # "%s, %s, %s, ... %s" 
query = 'SELECT name FROM table WHERE article_id IN ({})'.format(placeholders) 

cursor.execute(query, tuple(article_ids)) 
([매개 변수로 SQL 쿼리에서 파이썬 목록]의
+0

다시 작업하지 않고 출력과 코드를 질문에 넣습니다. 확인하고 도움을 주시면 감사하겠습니다. –

+0

sqlite를 사용하고 있습니까? 어떤 DB를 사용하고 있습니까? 무슨 파이썬 드라이버? – elyase

+0

Db가 mysql이고 파이썬 버전은 2.7입니다 –

관련 문제