使用SQLAlchemy ORM(声明性表单),如何以编程方式从字典中的一组条件创建查询?
我希望在用户表中搜索与先前在dict中收集的某些条件匹配的记录。我事先不知道将使用哪些字段,并且必须能够处理某些字段是整数,一些是字符串,可能有很多不同的字段等。
示例:
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
email = Column(String)
已请求两个查询,产生以下结果:
q1_dict = {'id' : 177}
q2_dict = {'name' : 'Johnny', 'email' : 'johnny@somewhere.com'}
是否有任何简单/通用的方法我可以从这两个dicts创建我的查询,只需依赖于键与User类的属性匹配的事实,同时正确处理类型,自动提取不安全的值等等?
我花了几个小时在谷歌上搜索,并浏览SQLAlchemy文档,但似乎找不到任何好的答案/例子。
解决方案:
所以,在你们的帮助下,解决方案似乎很简单:
User.query.filter_by(**q1_dict)
User.query.filter_by(**q2_dict)
...以获得示例中所需的两个查询。
我已经看过你提供的链接,dagoof,但我想我的“python”不够强大,无法自己找到解决方案。 :)
答案 0 :(得分:1)
答案 1 :(得分:0)
一些示例代码:
100 COND = and_()
.....
216 if hidxs_sg:$
217 clause = [AM.hidx == hidx for hidx in hidxs_sg]$
218 COND.append(or_(*clause))$
....
300 query = session.query(AM).filter(COND)$
关键是使用and_()创建AND条件,并将单个表达式添加到条件....