Python SQLAlchemy-从dict动态生成查询过滤器

Python SQLAlchemy-从dict动态生成查询过滤器,python,sqlalchemy,Python,Sqlalchemy,所以我有一个从网页传来的口述。我想基于dict动态构建查询。我知道我可以做到: session.query(myClass).filter_by(**web_dict) 但是,这仅在值完全匹配时才起作用。我需要做“喜欢”过滤。使用\uuuu dict\uuu属性的最佳尝试: for k,v in web_dict.items(): q = session.query(myClass).filter(myClass.__dict__[k].like('%%%s%%' % v)) 不确定

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

session.query(myClass).filter_by(**web_dict)
但是,这仅在值完全匹配时才起作用。我需要做“喜欢”过滤。使用
\uuuu dict\uuu
属性的最佳尝试:

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

不确定如何从那里构建查询。任何帮助都将是了不起的。

你走在正确的轨道上

首先要做的是使用
getattr
访问属性,而不是
\uuuu dict\uuu
getattr
总是做正确的事情,即使映射属性不是列属性(对于更复杂的模型可能就是这样)

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

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

请不要在评论中发垃圾邮件
getattr(myClass,attr)
没有属性
like
@Mohsen:请原谅这个友好的玩笑。如果你使用SqLalCy有问题,考虑一下;我当然无法重现您似乎遇到的问题。@MacGuy谢谢,您的代码解决了我的问题。。。。很抱歉我的第一个评论…..如何构造使用
过滤器聚合的动态过滤器集?如“(对类似于x的字段A进行筛选)或(对类似于y的字段A进行筛选)”?x和y以及可能更多的选项将通过用户输入提供。