如何在 peewee 中做一个 IN 运算符

How to do an IN operator in peewee

我有一个存储用户的数据库。这些用户拥有 'phone_number' 属性。

我想检索 'phone_number' 包含在我的列表中的用户列表。

类似于:

contacts = ["123","321","456","654"]
friends = []
for user in User.select(User.phone_number).where(User.phone_number in contacts):
    friends.append(user.phone_number)

问题:那段代码returns每个用户的phone号码,而不仅仅是联系人中包含的号码。

我可以通过以下方式实现我想要的:

friends = [u.phone_number for u in User.select(User.phone_number) if u.phone_number in contacts]

但据我了解,这种方法可能是先从数据库中检索所有用户,将它们变成 python 对象,然后进行过滤。如果我有大量用户,这似乎非常低效,因为它 python 进行过滤而不是数据库。

本文档显示了 peewee 的查询运算符: http://peewee.readthedocs.org/en/latest/peewee/querying.html#query-operators

具体回答你的问题可以

User.phone_number << contacts