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支持! –