2015-10-30 79 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()