Python如何使用SQLAlchemy过滤列值位于指定数组中的数据
问题原因分析
- 你的写法确实存在错误:Python原生的
in运算符无法被SQLAlchemy重载,当你书写models.User.location in offices时,Python会直接判断models.User.location这个ORM列对象本身是否存在于offices列表中,返回的固定是布尔值False,等价于你给查询加了一个永远不成立的过滤条件,因此查询结果始终为空。
正确实现方式
SQLAlchemy为列对象提供了专用的in_()方法来实现IN查询逻辑,修改后的代码如下:
offices = ['US', 'UK', 'MEX'] users_db = models.s.query(models.User).filter(models.User.location.in_(offices)).all()
- 如果需要实现
NOT IN的反向筛选逻辑,可以使用not_in()方法或者取反运算符:# 写法1:使用not_in方法 users_db = models.s.query(models.User).filter(models.User.location.not_in(offices)).all() # 写法2:使用取反运算符 users_db = models.s.query(models.User).filter(~models.User.location.in_(offices)).all()
内容的提问来源于stack exchange,提问作者Omar Abdelrazik
相关产品推荐
相关产品推荐

