首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用文本的SQLAlchemy hybrid_property order_by

使用文本的SQLAlchemy hybrid_property order_by
EN

Stack Overflow用户
提问于 2021-07-15 17:12:27
回答 1查看 198关注 0票数 0

给定以下模型

代码语言:javascript
复制
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,它就能工作

代码语言:javascript
复制
result = Person.query.filter(or_(*some_filters)).order_by(Person.is_configured).all()

使用sqlalchemy.text会导致SQL错误,说明没有列persons.is_configured

代码语言:javascript
复制
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来完成这项工作,但是如果有一种方法可以使其与视图提供的文本一起工作,则这将是首选的。

EN

回答 1

Stack Overflow用户

发布于 2021-07-15 19:24:52

不,这不可能。TextClause是纯SQL的,并对数据库执行。由于混合属性是ORM对象,因此数据库对此一无所知。

P.s.:有几种方法可以实现你想要的,但也许可以更详细地阐述一下你想要达到的目标。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68398124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档