查询使用filter()筛选失败

在程序里有个查询语句,简化如下:
F=f.query.filter(X.item in list_a).all()
查询出来的结果为空,但如果写成:
F=f.query.filter(X.item == list_a[0]).all()
#list_a[0]也可以换为其他元素,只要list_a[i]的值与X.item相等#
就可以查询到结果。
请问各位不可以用filter(item in list)这种判断条件作为筛选条件吗?那如果想以元素是否在列表内作为筛选条件应该怎么办呢?

1 个赞

不要使用 Python 内建的 in,要用SQLAchemy的in

F=f.query.filter(X.item.in_(list_a)).all()

类似的还有or,and等。我放一些自己收集的示例,你自己体会

from sqlalchemy import or_, and_, desc

#简单查询
session.query(User).all()
session.query(User.name, User.fullname).all()
session.query(User, User.name).all()

#带条件查询
session.query(User).filter_by(name='user1').all()
session.query(User).filter(User.name == "user").all()
session.query(User).filter(User.name.like("user%")).all()
session.query(User).filter(User.id > 5).all()
session.query(User).filter(User.id.in_(1, 3, 5)).all() # in

# 倒序
session.query(User).order_by(User.id.desc()).all()
session.query(User).order_by(desc(User.id)).all()

#多条件查询
session.query(User).filter(and_(User.name.like("user%"), User.fullname.like("first%"))).all()
session.query(User).filter(or_(User.name.like("user%"), User.password != None)).all()

3 个赞

啊 明白了 非常感谢 :blush: