给定以下模型
class Person(db.Model):
__tablename__ = 'persons'
name = db.Column(db.String(10), nullable=False)
age = db.Column(db.Integer(), nullable=False)
def __init__(self):
self.name = ''
self.age = 0
@hybrid_property
def is_configured(self):
return self.name != '' and self.age > 0是否可以使用order_by在is_configured hybrid_property上使用sqlalchemy.text构造查询?
如果我们使用ORM来order_by,它就能工作
result = Person.query.filter(or_(*some_filters)).order_by(Person.is_configured).all()使用sqlalchemy.text会导致SQL错误,说明没有列persons.is_configured
result = Person.query.filter(or_(*some_filters)).order_by(text('persons.is_configured asc')).all()更新2021-07-16
关于为什么打开这个问题的一些背景:我们有一个模板,它为用户帐户呈现一个表,其中一些列是相关表上的字段。单击列的标题将按列进行排序,向服务器发送table_name.column到order_by的请求。我们有一个例子,列是一个属性。我们想把它变成一个hybrid_property,这样我们就可以通过它进行查询和订购了。我们可以通过将文本映射到ORM来完成这项工作,但是如果有一种方法可以使其与视图提供的文本一起工作,则这将是首选的。
发布于 2021-07-15 19:24:52
不,这不可能。TextClause是纯SQL的,并对数据库执行。由于混合属性是ORM对象,因此数据库对此一无所知。
P.s.:有几种方法可以实现你想要的,但也许可以更详细地阐述一下你想要达到的目标。
https://stackoverflow.com/questions/68398124
复制相似问题