假设我有一个Postgres数据库(9.3)并且有一个名为的表Resources.在Resources表中,我有id一个int data类型的字段,它是一个JSON类型.
假设我在表中有以下记录.
我想要做的是编写一个查询,返回所有记录,其中数据列有一个json元素,其lastname等于"Doe"
我试着写这样的东西:
records = db_session.query(Resource).filter(Resources.data->>'lastname' == "Doe").all()
Run Code Online (Sandbox Code Playgroud)
然而,Pycharm在" - >>"上给出了编译错误
有谁知道如何编写filter子句来做我需要的东西?
我有一个现有的 SQLAlchemy 模型,应该与另一个模型有关系,但遗憾的是,连接点是 JSON PostgreSQL 列的(子)字段。
假设一个表“类别”是:
id(bigint) | name(string)
-------------------------
5 | Comics
Run Code Online (Sandbox Code Playgroud)
...第二个表“英雄”是:
id(bigint) | name(string) | info(JSON)
-------------------------------------------------------------
2 | Tranquility | {"category_id":5, "genre_id": 17}
Run Code Online (Sandbox Code Playgroud)
在 python SQLAlchemy& PostgreSQL9.5中,我如何通过 加入category来hero获得以下结果?heroinfo["category_id"]
id(bigint) | name(string) | category_name | info(JSON)
-------------------------------------------------------------
2 | Tranquility | Comics | {"category_id":5, "genre_id": 17}
Run Code Online (Sandbox Code Playgroud)
根据这个答案,我知道 PostgreSQL 本身有可能发生这样的事情
https://dba.stackexchange.com/a/83935 ( http://sqlfiddle.com/#!15/226c33/1 )
并且可能需要一些转换或绕过默认方式的技巧,
如sqlalchemy filter by json field
中所述
注意:请注意,我无法更改数据库结构或模型的现有部分,而且我也不是在寻找我已经知道的双重查询绕过。