SQLite查询从列表中选择数字

时间:2012-02-26 12:19:46

标签: python sqlite

当您想在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 个答案:

答案 0 :(得分:1)

您遇到的问题的详细分类,您可以在此处找到解决方案的选项:

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

这取自:

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

答案 1 :(得分:1)

您可以自己格式化语句,例如:

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)