https://codeday.me/bug/20180318/145857.html
所以我有一个从网页传递的dict。我想基于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))
不知道如何从那里构建查询。任何帮助都是极好的
首先要做的不同之处是访问属性使用getattr,而不是__dict__; getattr将始终做正确的事情,即使(对于更复杂的模型而言),映射属性不是列属性。
另一个缺失的部分是您可以多次指定filter(),只需用该方法调用的结果替换旧的查询对象。所以基本上
q = session.query(myClass)
for attr, value in web_dict.items():
q = q.filter(getattr(myClass, attr).like("%%%s%%" % value))