我想使用一个函数来确定在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 :(得分: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()