Bir tam sayı var, tuple içinde bulunan sütun değeri olan tüm satırları sorgulamak istiyorum. Sorguyu oluşturmak çok kolaydır, ancak sql enjeksiyon kanıtı olmasını istiyorum. Normalde hazırlanan ifadeyi kullanırım, ancak her iki ihtiyaçla nasıl başa çıkacağımı anlamıyorum.MySQL ve PYTHON. Bir WHERE 'sütun' tuple nasıl sorgulanır?
Benim sorgu inşaat benziyor:
filterList = (1, 2, 4) #Taken as input. Should be integers
sqlRequest = 'SELECT * FROM table'
if filterList != None and len(filterList) > 0:
sqlRequest += ' WHERE column IN ('
addComa = False
for filter in filterList:
if addComa:
sqlRequest += ','
else:
addComa = True
sqlRequest += '%s'%(int(filter)) #casted to int to avoid SQL injection. Still not as good as I would like
sqlRequest += ')'
#At this point sqlRequest == 'SELECT * FROM table WHERE column IN (1,2,4)'
sqlResult = cursor.execute(sqlRequest)
ben bir sorgu gibi daha çok isteriz:
sqlRequest = 'SELECT * FROM table WHERE column IN (%s, %s, %s)'
Ve hazırlanmış deyimi ile çalıştırmak için:
sqlResult = cursor.execute(sqlRequest, filterList[0], filterList[1], filterList[2])
Ama değişken uzunluk olarak filterList. Bir şey yapmanın bir yolu var mı?
sqlResult = cursor.execute(sqlRequest, filterList) #where filterList is the whole tuple
Aynı şekilde diğer veritabanları olduğu gibi, (https://stackoverflow.com/q/14245396) ve [Veritabanı API [Bir WHERE \ _ \ _ \ _ İÇİNDE \ _ \ _ \ _ deyimi kullanma] bakınız : Python'da durumun nasıl olduğu ile nasıl başa çıkılır] (https://stackoverflow.com/q/19043987) Örnekler. –
Üzgünüm, önerilen düzenlemenizi nix yapmak istemediniz, sadece yer tutucu çoğaltma düzeltmesine göz gezdirin. –
Sorun değil. Düzenlemenin yapılması için en az 6 değişiklik (bazı faydasızlar dahil) yapmam gerekiyordu. –