如何在Python Peewee ORM中使用`WHERE value IN list`进行查询?

kra*_*r65 12 python orm flask peewee

我正在使用(真棒)Python Peewee ORM作为我的Flask项目,但我现在卡住了尝试用a进行查询where value in ['a', 'b', 'c'].我尝试按如下方式进行:

MyModel.select().where(MyModel.sell_currency in ['BTC', 'LTC'])
Run Code Online (Sandbox Code Playgroud)

但遗憾的是,它会返回数据库中的所有记录.我有什么想法可以做到这一点?

amb*_*mbi 28

文档给出了答案:x << y将执行IN y,其中y是一个列表或查询X.所以最终的查询将如下所示:

MyModel.select().where(MyModel.sell_currency << ['BTC', 'LTC'])

  • Python总是将`x in y`的返回值强制转换为布尔值,因此需要使用`<<`运算符. (6认同)
  • 这是一个python的东西,相信我,我宁愿使用``in``.如果你愿意,你也可以写`MyModel.sell_currency.in _(['BTC','LTC'])` (6认同)

小智 5

您还可以使用子查询执行“IN”表达式。例如,要获取用户名以“a”开头的用户:

a_users = User.select().where(fn.Lower(fn.Substr(User.username, 1, 1)) == 'a')
Run Code Online (Sandbox Code Playgroud)

.in_()方法表示“IN”查询

a_user_tweets = Tweet.select().where(Tweet.user.in_(a_users))
Run Code Online (Sandbox Code Playgroud)

请参阅http://peewee.readthedocs.io/en/latest/peewee/query_operators.html