SQLAlchemy:使用函数确定查询返回的结果

时间:2015-10-30 18:08:23

标签: python sqlite sqlalchemy

我想使用一个函数来确定在SQLAlchemy查询中选择哪些行。这是设置......

我们有一个基本的SQLAlchemy映射对象:

class Foo(base):
    foo_id = Column(Integer, primary_key=True)
    foo_data = Column(String(255))

现在,如果我们要查询具有foo_data特定值的所有表行,我们可以执行以下操作:

session.query(Foo).filter(Foo.foo_data == 'some data').all()

现在,我希望Foo.foo_data == 'some data'检查在函数中进行...所以我们的查询看起来像:

session.query(Foo).filter(check_foo(Foo.foo_data)).all()

check_foo的样子:

def check_foo(foo_data):
    if foo_data == 'foo':
        return True
    else:
        return False

这类事可能吗?显然,对于这个微不足道的案例,它实际上是不必要的,但对于更复杂的情况,这将非常有用。

1 个答案:

答案 0 :(得分:0)

您可以使用hybrid attributes

from sqlalchemy.ext.hybrid import hybrid_method

class Foo(base):
    foo_id = Column(Integer, primary_key=True)
    foo_data = Column(String(255))

    @hybrid_method
    def check_foo(self):
        return self.foo_data == 'foo'

    @check_foo.expression
    def check_foo(cls):
        return cls.foo_data == 'foo'

session.query(Foo).filter(Foo.check_foo()).all()