У меня есть данные, хранящиеся в 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]}
Я хочу чтобы определить максимальную глубину для каждой записи и выработал следующий запрос в raw 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
Поскольку я использую ORM SQLAlchemy в своем приложении, я хочу написать этот запрос с ORM SQLAlchemy, но я не могу придумать правильную форму.
Я думал, мне нужно что-то вроде этого:
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 в будущих версиях! –