2015-10-30 57 views
2

我想使用函数来确定在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 

是这种类型的东西可能吗?显然,对于这个微不足道的案例来说,这是非常不必要的,但对于更复杂的案例来说,这将非常有用。

回答

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()