3
我有存储在jsonb场像这样的数据: 如何查询jsonb阵列SQLAlchemy的
class Test(Base):
__tablename__ = 'test'
id = Column(Integer, primary_key=True)
data = Column(JSONB)
在data
列有以下形式的JSON:
{depth: [0.0, 0.01, 0.02, 0.03, 0.04, 0.05, 0.06]}
我想以确定每个记录的最大深度,并提出了原始SQL中执行以下查询的工作:
SELECT test.id, test.name,
(SELECT max(elem::float)
FROM jsonb_array_elements_text(test.data -> 'depth') As elem
) AS maxdepth
FROM test
ORDER BY maxdepth DESC
因为我在我的应用程序中使用SQLAlchemy ORM,我想用SQLAlchemy ORM编写这个查询,但我无法想出适当的表单。
我想我需要的是这样的:
subq = session.query(
func.max().label('maxdepth')).\
select_from(func.jsonb_array_elements(Test.data['depth'])).\
subquery()
stmnt = session.query(
Test.id, subq.c.maxdepth).\
order_by(subq.c.maxdepth)
但是,这显然是行不通的,因为我不知道如何从jsonb_array_elements
感谢您的帮助,我可以确认此作品。我希望你找到一种方法来改进将来版本中内置的SQLAlchemy PG/JSON支持! –