在查询中使用列表而不是数字或字符串

时间:2014-11-04 11:49:05

标签: python web2py

我想在查询中使用一个int列表,如下所示:

db.define_table('customer',Field('name'),Field('cusnumber','integer'))

def custmr():
    listOfNumbers=[22,12,76,98]
    qry=db(db.customer.cusnumber==listOfNumbers).select(db.customer.name)
    print qry

这引起了一个问题,即查询中唯一接受的数据类型是int或str。

有没有办法避免这个问题(最好不要使用for循环)

此致

2 个答案:

答案 0 :(得分:0)

很难知道你要问的是什么,但是根据db.define_table(...)的语法,我猜测你是在 web2py 并试图做一个查询在listOfNumbers

中获取任何 int

您可以使用contains这样的属性:

# if all=True, cusnumber will need to contains all listOfNumbers, False means any
qry=db(db.customer.cusnumber.contains(listOfNumbers, all=False)).select(db.customer.name)

您可以在HERE

中详细了解详情

由于OP回复称contains仅适用于字符串,我建议使用for/loop将是更好的答案:

listOfNumbers=[22,12,76,98]
for each in listOfNumbers:
     qry=db(db.customer.cusnumber==each).select(db.customer.name)
     # ... do your stuff or whatever ...

答案 1 :(得分:0)

假设您想要cusnumber位于listOfNumbers的记录集,则应使用.belongs方法:

qry = db(db.customer.cusnumber.belongs(listOfNumbers)).select(db.customer.name)