SQLAlchemy-从di动态构建查询过滤器

2024-05-14 10:22:22 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个从网页传来的口述。我想基于dict动态构建查询。我知道我可以做到:

session.query(myClass).filter_by(**web_dict)

但是,只有当值完全匹配时,这才起作用。我需要做“喜欢”过滤。我使用__dict__属性的最佳尝试:

for k,v in web_dict.items():
    q = session.query(myClass).filter(myClass.__dict__[k].like('%%%s%%' % v))

不知道如何从那里构建查询。任何帮助都会很棒。


Tags: inweb网页forby属性sessionmyclass
1条回答
网友
1楼 · 发布于 2024-05-14 10:22:22

你走对了!

首先要做的不同点是使用getattr访问属性,而不是__dict__getattr总是做正确的事情,即使(对于更复杂的模型)映射属性不是列属性。

另一个缺少的部分是,您可以多次指定filter(),只需用该方法调用的结果替换旧的查询对象。所以基本上:

q = session.query(myClass)
for attr, value in web_dict.items():
    q = q.filter(getattr(myClass, attr).like("%%%s%%" % value))

相关问题 更多 >

    热门问题