2012-03-22 3 views
1

Показалось mysqldb не имеет abvious способ использовать in заявлениекак использовать в заявлении в MySQLdb

execute('select * from test where id in(%s)','1,2,3') 

получит querysql="select * from test where id in ('1,2,3')"

Это Aparently не то, что я хочу. Теперь я должен использовать метод execute много раз и добавить fetchall результат вместе.

Есть ли лучший способ сделать это?

ответ

2

Попробуйте это:

data = [1,2,3] # stores the data 
in_part = ','.join(['%s'] * len(data)) # prepares formatting string 
execute('select * from test where id in(' + in_part + ')', data) 
+1

wow, это работает, хорошая идея – bigwesthorse

0

Если у вас есть список номеров, вы можете использовать это:

execute('select * from test where id in ({0},{1},{2})'.format(1, 2, 3)) 
# query 'select * from test where id in (1,2,3)' 

, если с другой стороны, у вас есть строка использовать это:

execute('select * from test where id in ({0})'.format('1, 2, 3')) 
# query 'select * from test where id in (1, 2, 3)' 

Обычно используется функция format() для управления строками. Подробнее об этом см. В официальных документах here и here.

+0

С сожалением сообщаю вам, но это плохая идея. Знаете, почему в 'execute()' есть второй параметр? См. Http://www.python.org/dev/peps/pep-0249/ Плюс ваше решение не поддерживает последовательности переменной длины. – Tadeck

+0

ну, очевидно формат нужен на самом деле номера, которые нужно заполнить, а спасибо u все еще – bigwesthorse

+0

Моя ошибка ребята. Спасибо Тадеку за это. Я просто искал конкатенацию строк. – satran

Смежные вопросы