我有一个类模型定义如下:
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)
详细信息行是字典格式。(等:{"status": 1, "win_price": 0,..}
)
如何使用win_price
?
答案 0 :(得分:1)
In [20]: session.query(Order.detail).\
...: order_by(Order.detail.cast(JSON)['win_price']).\
...: all()
将发出以下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)
用params:
{'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()