在sqlalchemy中,我定义了一个函数,其参数是一个字典可能包含多个键值。我想根据键值进行查询。这是我的计划:
def get_contact_conditions(kwds):
for fieldName, fieldValue in kwds.items():
condition = fieldName + "=:fieldName"
contact = session.query(Contact).filter(condition).params(fieldName = fieldValue).all()
session.commit()
return contact
上面这种情况是当字典只有一个键值,但可能有两个或三个,那么如何编码条件和params()中的值。换句话说,如何编码查询子句。
谢谢!
答案 0 :(得分:0)
如果您需要的唯一比较是“=”,那么这应该有效:
def get_contact_conditions(kwds):
contact = session.query(Contact).filter_by(**kwds).all()
return contact
你可以在这里阅读:
http://docs.sqlalchemy.org/en/rel_0_7/orm/query.html#sqlalchemy.orm.query.Query.filter_by
如果您需要任意运算符(<,>,in_,like等),您可以将sqlalchemy子句列表作为参数传递给and_函数,并将结果传递给filter()。将模型类属性与某些内容进行比较时会生成这些表达式,例如:
Contact.id < 5
所以你可以这样做:
from sqlalchemy.sql import and_
def get_contacts(*exps):
return session.query(Contact).filter(and_(*exps)).all()
# All contacts with an id less than 5 and a name that starts with user.
contacts = get_contacts(Contact.id < 5, Contact.name.like('user%'))
但是你应该考虑到这一点,函数越来越接近直接调用session.query。
您应该更多地阅读sqlalchemy文档,以了解模型列/关系中可用的运算符/比较。有一些非常有用的。