2011-11-03 5 views
11

SQL 쿼리에서 가변 길이 자리 표시자를 사용하는 방법이 있습니까? 3 튜플와Python에서 SQLite3 호출시 가변 길이 자리 표시자를 얻는 방법

지금, 나는 이런 식으로 뭔가를 쓰기 :

c.execute('SELECT * FROM table WHERE word IN (?, ?, ?)', tup) 

그러나 대가리는 길이가 서로 다른의 무엇을 할 수 있다면, 아마도 4 튜플 또는 2 튜플? 이 상황에서 자리 표시자를 사용하는 구문이 있습니까? 그렇지 않은 경우 코드를 작성하는 기본 방법은 무엇입니까?

답변

12

당신은 (당신의 예제를 사용하는) 이런 식으로 뭔가를해야 할 것 :

tup = ... # some sequence/tuple of unknown length 
sql = 'SELECT * FROM table WHERE word IN (%s)' % ', '.join('?' for a in tup) 
c.execute(sql, tup) 

이 방법을 동적으로 자리 표시 자 목록을 작성하고 sqlite3를 모듈을 파싱하기 전에 SQL 문자열을 포맷하고 있습니다.

+0

나는 거기에 있었으면 좋겠다고 생각 했습니까 ?? 또는? * 변종이 일종의,하지만 당신의 제안 멋지게 할 것입니다. –

+3

나는 ',', .join ('?'을 a tup)'', '.' ',' ''* len (tup) '로 작성한다. – Duncan

+3

@Duncan : 나에게 덜 분명해 보이는 Idunno 더 많은 신호 잡음. 생성자의 이해력은 영어와 비슷합니다. – rossipedia

관련 문제