2016-05-02 3 views
0

У меня есть список значений (слов), и я хочу проверить, содержит ли столбец в моей таблице значение (любое значение) из списка.Несколько слов в поле Where LIKE

Мой список может быть очень длинным, поэтому я хочу, чтобы создать его, используя для цикла, например:

words = ('one', 'two', 'three') 
whereClause="" 
a="" 
for word in words: 
    temp=" item LIKE '%" +word + " %' or" 
    whereClause=whereClause+temp 
whereClause = whereClause[17:] #delete first "item LIKE" 
whereClause = whereClause[:-3] #delete last "or" 

Теперь я хочу, чтобы положить его в моем запросе SQL:

sql= """select name 
from table 
where item LIKE ? """ 

cursor.execute(sql, whereClause) 
rows=cursor.fetchall() 

Это не работает, какие-либо предложения?

Как вы думаете, что лучше получить все значения столбца «имя», используя SQL запрос и только затем проверить, если значения из списка существует с помощью Python? Спасибо!

+0

ваша проблема, когда вы удалите свой первый пункт как. Упростить вещи и в вашей переменной sql оставить ее как «где?» и не удаляйте первый элемент, как –

+0

Пожалуйста, не создавайте предложение 'where' таким образом, поскольку оно предоставляет вам атаки SQL-инъекции. Лучше всего построить так много итераций 'OR item LIKE? 'Как количество элементов в' words'. Затем передайте весь массив 'words' как sqlParameter во время выполнения. – Stavr00

+0

спасибо @ Stavr00, но я не уверен, что понимаю вашу идею. не могли бы вы объяснить? – user5435739

ответ

0

В случае, если вы по-прежнему сталкиваются с проблемами:

words = ('one', 'two', 'three') 
whereClause="" 

i = 1 
for word in words: 
    if i == 1: 
     whereClause = " item LIKE '%" +word + "%'" 
    else: 
     whereClause += " OR item LIKE '%" +word + "%'" 
    i += 1 

sql= """select name 
from table 
where {0} """.format(whereClause) 

cursor.execute(sql) 
rows=cursor.fetchall() 
0

не очень свободно в Python, но здесь идет:

for word in words: 
    whereClause += " OR" if whereClause 
    whereClause += " ITEM LIKE ?" 
sql= "select name from table where" + whereClause 
cursor.execute(sql, words)