Python 2.7 在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

在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()中编码条件和值。换句话说,如何对查询子句进行编码


谢谢大家!

如果您需要的唯一比较是“=”,那么这应该可以:

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文档,以了解模型列/关系上可用的运算符/比较。有一些非常有用的方法。

告诉你,你的答案很好。但正如你所说,当“>”或