2011-11-03 14 views
11

Czy istnieje sposób na użycie zmiennych zastępczych w zapytaniu SQL?Jak uzyskać symbole zastępcze o zmiennej długości w wywołaniu w języku Python do SQLite3

Teraz z 3-krotki, piszę coś takiego:

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

Ale co jeśli tup mogą być różnej długości, może 4-krotka lub 2-krotka? Czy w tej sytuacji jest składnia do używania symboli zastępczych? Jeśli nie, jaki jest preferowany sposób napisania kodu?

Odpowiedz

12

Trzeba by zrobić coś takiego (aby użyć przykładu):

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

ten sposób jesteś dynamicznie tworząc listę zastępczy i formatowania ciąg SQL przed moduł sqlite3 analizuje go.

+0

Miałem nadzieję, że jest? lub? * wariant tego typu rzeczy, ale twoja sugestia ładnie się sprawdzi. –

+3

Napisałbym '',' .join ("? "Dla a in tup)' jako '',' .join ("? "* Len (tup))' – Duncan

+3

@Duncan: Idunno, które wydaje mi się mniej zrozumiałe więcej hałasu sygnału. Zrozumienie generatora wydaje się być bardziej podobne do angielskiego – rossipedia

Powiązane problemy