","value":"1"} 和现有的查询-6ren">
gpt4 book ai didi

python - Sqlalchemy orm 根据给定输入动态查询过滤

转载 作者:行者123 更新时间:2023-11-29 06:50:47 34 4
gpt4 key购买 nike

我发现需要对给定查询创建动态 orm 过滤。
即,给定一些输入字典:
{"orm_entitiy":"城市", attribute":"id","op":">","value":"1"}
和现有的查询对象 query

需要评估为:new_filtered_query = query.filter(City.id > 1)

我的问题是:
1. 您是否熟悉一些可以解决此需求的成熟库?
2.我在SO中看到了解决方案和一个blog ,但我很难理解该部分:

 attr = list(filter(
lambda e: hasattr(column, e % op),
['%s', '%s_', '__%s__']
))[0] % op

有人可以详细描述一下这背后的逻辑吗?

最佳答案

让我们通过使其更加冗长来简化该表达式。

existing_attrs = list(filter(<filter_func>, potential_attributes))
attr = existing_attrs[0] % op

第一行生成 potential_attributes 中的对象列表通过<filter_func>的检查.
第二行更简单:我们采用第一个现有属性并对它应用字符串格式。

<filter_func>lambda e: hasattr(column, e % op) :如果column则返回True有一个名为 e % op 的属性,这是应用了字符串格式的当前势能属性。

例如,如果 potential_attributes['%s', '%s_', '__%s__']opgt ,将检查以下属性:column.gt , column.gt_column.__gt__ .

假设我们有一个 column.gt_属性。因此,通过检查的值是 %s_并将被放入existing_attrs的列表中。然后,第二行( attr = '%s_' % 'gt' )将生成字符串 'gt_' .

关于python - Sqlalchemy orm 根据给定输入动态查询过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47601137/

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