Python 2.7 在sqlalchemy中进行查询时,如何处理字典构造中的多个参数?
在sqlalchemy中,我定义了一个以字典为参数的函数,它可以包含多个键值。我想根据键值进行查询。这是我的节目:Python 2.7 在sqlalchemy中进行查询时,如何处理字典构造中的多个参数?,python-2.7,sqlalchemy,Python 2.7,Sqlalchemy,在sqlalchemy中,我定义了一个以字典为参数的函数,它可以包含多个键值。我想根据键值进行查询。这是我的节目: def get_contact_conditions(kwds): for fieldName, fieldValue in kwds.items(): condition = fieldName + "=:fieldName" contact = session.query(Contact).filter(condition).params
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()中编码条件和值。换句话说,如何对查询子句进行编码
谢谢大家! 如果您需要的唯一比较是“=”,那么这应该可以:
def get_contact_conditions(kwds):
contact = session.query(Contact).filter_by(**kwds).all()
return contact
您可以在此处阅读:
如果需要任意运算符(、in、like等),可以将sqlalchemy子句列表作为参数传递给and函数,并将结果传递给filter()。这些表达式是在将模型类属性与以下内容进行比较时生成的:
Contact.id < 5
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%'))
来自sqlalchemy.sql导入和_
def get_联系人(*EXP):
return session.query(Contact.filter(and(*exps)).all()
#id小于5且名称以user开头的所有联系人。
contacts=get_contacts(Contact.id<5,Contact.name.like('user%'))
但您应该考虑到,此时函数越来越接近直接调用SeStudio。
您应该进一步阅读sqlalchemy文档,以了解模型列/关系上可用的运算符/比较。有一些非常有用的方法。告诉你,你的答案很好。但正如你所说,当“>”或