2011-11-03 11 views
11

Bir SQL sorgusunda değişken uzunluk yer tutucularını kullanmanın bir yolu var mı? 3 tuple ileDeğişken uzunluk yer tutucuları bir Python çağrısında SQLite3'e nasıl alınır

Şu anda, böyle bir şey yazmak:

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

Ama tup farklı uzunluklarda ne olabiliyorsa, belki bir 4-lü veya 2-lü? Bu durumda yer tutucuları kullanmak için bir sözdizimi var mı? Değilse, kodu yazmanın tercih edilen yolu nedir?

cevap

12

Sen (örnek kullanmak için) böyle bir şey yapmak zorundayız:

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

Bu şekilde dinamik tutucu listesi oluşturma ve Sqlite3 modülü dışarı ayrıştırır önce SQL dizesi biçimlendirme ediyoruz.

+0

Orada olduğunu umuyordum? ya da? * bu tür bir şey için varyant, ama öneriniz güzel yapacak. –

+3

Ben ',' .join ('t' için '?') '', '.' '('? '' * Len (tup)) ' – Duncan

+3

@Duncan: Ben daha az açık görünüyor idunno daha fazla sinyal sesi. Jeneratör anlaşması, İngilizce – rossipedia

İlgili konular