0

在sqlalchemy中,我定义了一个函数,它的参数是一个字典,可能包含多个key-values。我想根据key-values进行查询。这是我的程序:

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()中的值。换句话说,如何编写查询子句。

谢谢!

4

1 回答 1

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

于 2013-05-07T16:08:58.843 回答