Python sqlalchemy-如何按值对字典文本字段排序

Python sqlalchemy-如何按值对字典文本字段排序,python,sqlalchemy,Python,Sqlalchemy,我有一个类模型定义如下: class Order(orm.Model): __tablename__ = "order_index" id = orm.Column(orm.BigInteger, primary_key=True) detail = orm.Column(orm.TEXT) query = Order.query.filter(some_filter) 详细信息行采用字典格式。etc:{状态:1,价格:0,…} 如何按win_price键对查询结果进行

我有一个类模型定义如下:

class Order(orm.Model):
    __tablename__ = "order_index"
    id = orm.Column(orm.BigInteger, primary_key=True)
    detail = orm.Column(orm.TEXT)
query = Order.query.filter(some_filter)
详细信息行采用字典格式。etc:{状态:1,价格:0,…}
如何按win_price键对查询结果进行排序?

由于您的模式无法更改,您必须使用

将发出以下SQL:

SELECT order_index.detail AS order_index_detail 
FROM order_index
ORDER BY JSON_EXTRACT(CAST(order_index.detail AS JSON), %(param_1)s)
使用参数:

{'param_1': '$."win_price"'}
如果您使用的是比1.1早的SQLAlchemy,它引入了MySQL JSON支持,但是使用的是MySQL 5.7.8或更高版本,那么您可以手动形成所需的查询:

In [13]: session.query(Order.detail).\
    ...:     order_by(func.json_extract(Order.detail, '$."win_price"')).\
    ...:     all()

这取决于您正在使用的数据库。mysql,我正在尝试获得一个自定义的手动方式mysql支持JSON,那么为什么不使用它呢?那会让你的生活轻松很多。我想您可以使用强制转换,然后访问相关字段。您的意思是将.text转换为.json?最好是这样,但如前所述,如果您的模式已经设置为固定模式,则可以强制转换。请定义无法正常工作。你提到导入,你导入了JSON类型吗?从sqlalchemy导入JSON。我相信JSON支持在MySQL中是相对较新的。你用的是什么版本?query=table.query.filtergenerate\u filterquery\u dct,table query.order\u bytable.detail.castJSON['win\u price']我只是不知道发生了什么。服务器只是停止工作,没有日志,你提到你有大量的数据。多大?生成的过滤器的选择性如何?它可能是想点整张桌子,还是其中很大一部分?如果是这种情况,您可能必须创建以类似方式从详细信息生成的生成列,对它们进行索引,并使用这些列进行排序。生成的筛选器工作正常。我只是想向您展示,我使用查询来进一步查询.orderby。我发现问题是,在我从sqlalchemy导入JSON后,系统崩溃而没有日志,这是非常意外的。。。您使用的是什么版本的SQLAlchemy?
In [13]: session.query(Order.detail).\
    ...:     order_by(func.json_extract(Order.detail, '$."win_price"')).\
    ...:     all()