SQLite запрос выбора номера из списка - PullRequest
0 голосов
/ 26 февраля 2012

Если вы хотите написать запрос в Python, который выберет (из SQLite базы данных) все книги, которые содержат 300 страниц, вы напишите:

numsPages = 300
cur.execute("select * from  books where number_of_pages = :numsPages", locals())

Проблема в том, что вы хотите выбрать книги с количеством страниц из определенного набора

lst = computeListFromVariousInputs() # lst is list containing natural numbers
cur.execute("select * from  books where number_of_pages in :lst", locals())

Вышеприведенное утверждение невозможно.

Трудно написать в операторе много операторов or, поэтому я бы хотел использовать оператор in.

Как бы вы написали запрос без использования множества операторов or и использования какого-либо списка Python или другой структуры данных?

Возможно, пример кажется не практичным (и он есть), но этот вопрос более понятен, когда я использую этот пример.

Ответы [ 2 ]

1 голос
/ 26 февраля 2012

Вы можете отформатировать выписку самостоятельно, например ::10000

a = [100, 200, 300, 400]
## The a bit more formatting is used because the list contains integers, i.e., the join with string casting
stmt = 'select * from books where number_of_pages in ({0})'.format(', '.join([str(v) for v in a]))

print stmt
>>> select * from books where number_of_pages in (100, 200, 300, 400)
1 голос
/ 26 февраля 2012

Хорошая разбивка проблемы, с которой вы сталкиваетесь, и ваши варианты решений можно найти здесь:

http://www.javaranch.com/journal/200510/Journal200510.jsp#a2

Эта информация взята из:

https://stackoverflow.com/a/189399/1232478

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...