我有一个Postgres表,其中有一个JSON类型的列,列中有一堆JSON对象,我想查询表中的记录,并按存储在JSON字段中的键值对结果进行排序。
row1 {'2011': 600, '2012': 100, '2014': 200}
row2 {'2011': 700, '2012': 100, '2014': 200}
row3 {'2011': 500, '2012': 100, '2014': 200}
我怎样才能提出这样的要求:
Table.query.order_by(Table.data['2011']).all()
结果:
500
600
700
我已经尝试了查询:
Table.query.order_by(Table.data.cast(JSON)['2011']).all()
Table.query.order_by(Table.data(JSON)['2011']).all()
但是我总是得到各种各样的错误
1条答案
按热度按时间ttygqcqt1#
您可以通过将值提取为文本,然后转换为整数来完成此操作。具体如何执行此操作取决于数据库和模型中的列类型。
如果数据库中的列类型是JSON,而模型中的列类型是SQLAlchemy的通用JSON类型,则需要将值强制转换为文本类型,然后再转换为数值类型。
如果数据库中的列是JSON,并且模型中的列类型是SQLAlchemy的PostgresSQL方言中的JSON类型,则可以使用列的
astext
属性,而不是强制转换为文本类型(可以在模型中将列类型从通用JSON更改为Postgres JSON,但必须进行迁移)。如果数据库中的列类型为JSONB,模型中的列类型为JSONB,则可以直接使用该值: