【发布时间】:2020-08-30 19:25:32
【问题描述】:
我有一个现有的 SQLAlchemy 模型,它应该与另一个模型有关系,但遗憾的是,那里的连接点是 JSON PostgreSQL 列的(子)字段。
假设一个表“类别”是:
id(bigint) | name(string)
-------------------------
5 | Comics
...第二个表“英雄”是:
id(bigint) | name(string) | info(JSON)
-------------------------------------------------------------
2 | Tranquility | {"category_id":5, "genre_id": 17}
我将如何在 python SQLAlchemy&PostgreSQL9.5 中通过hero 通过hero 的info["category_id"] 加入category 以获得以下结果?
id(bigint) | name(string) | category_name | info(JSON)
-------------------------------------------------------------
2 | Tranquility | Comics | {"category_id":5, "genre_id": 17}
根据这个答案,我知道在 PostgreSQL 本身中这样的事情是可能的
https://dba.stackexchange.com/a/83935 (http://sqlfiddle.com/#!15/226c33/1)
并且可能需要一些技巧来转换或绕过默认方式
如sqlalchemy filter by json field中所述
注意:请注意,我无法更改数据库结构或模型的现有部分,我也不是在寻找我已经知道的双重查询绕过。
【问题讨论】:
-
在链接问题和 jsonb access+cast 模式的基础上,添加
Query.join()接受明确的 ON 子句作为第二个参数应该让您前进。 -
@IljaEverilä 你的意思是原始 SQL 吗? (我正在寻找更多的 sql-alchemy 方式)
标签: python json postgresql join sqlalchemy