gpt4 book ai didi

python - 使用 SQLAlchemy 进行动态 OR 过滤

转载 作者:太空宇宙 更新时间:2023-11-03 17:52:40 25 4
gpt4 key购买 nike

我有一个 SQLAlchemy 模型属性列表。例如:

my_list = ['firstName', 'lastName']

我还有一个带有 firstName 和 lastName 属性的 Person SQLAlchemy 对象。

我想在我的数据库中搜索具有如下查询的人员:session.filter( Person.lastName.like(query+'%') | Person.firstName.like(query+'%')).all()

棘手的部分是我想从 my_list 列表动态生成上述过滤器。例如,如果将 emailAddress 添加到列表中,我希望查询也通过对象电子邮件属性进行搜索。

最佳答案

如果您了解 reduce,那么使用 SQLAlchemy 这将非常容易;使用 getattrPerson 类获取动态命名的列。

from functools import reduce  # python 3
from operator import or_

columns = [ 'firstName', 'lastName' ]

# make a list of `Person.c.like(query+'%')`
likes = [ getattr(Person, c).like(query+'%') for c in column ]

# join them with | using reduce; does the same as likes[0]|likes[1]|....
final_filter = reduce(or_, likes)

session.filter(final_filter).all()

尽管 or_ 也接受任意数量的 or 子句,因此您也可以使用参数解包:

 final_filter = or_(*likes)

关于python - 使用 SQLAlchemy 进行动态 OR 过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28924525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com