You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 04:30:00