相关疑难解决方法(0)

Python SQLAlchemy和Postgres - 如何查询JSON元素

假设我有一个Postgres数据库(9.3)并且有一个名为的表Resources.在Resources表中,我有id一个int data类型的字段,它是一个JSON类型.

假设我在表中有以下记录.

  • 1,{'firstname':'Dave','lastname':'Gallant'}
  • 2,{'firstname':'John','lastname':'Doe'}

我想要做的是编写一个查询,返回所有记录,其中数据列有一个json元素,其lastname等于"Doe"

我试着写这样的东西:

records = db_session.query(Resource).filter(Resources.data->>'lastname' == "Doe").all()
Run Code Online (Sandbox Code Playgroud)

然而,Pycharm在" - >>"上给出了编译错误

有谁知道如何编写filter子句来做我需要的东西?

python postgresql json sqlalchemy filter

24
推荐指数
2
解决办法
2万
查看次数

SQLAlchemy 通过 JSON 子字段连接

我有一个现有的 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中,我如何通过 加入categoryhero获得以下结果?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
中所述

注意:请注意,我无法更改数据库结构或模型的现有部分,而且我也不是在寻找我已经知道的双重查询绕过。

python postgresql json join sqlalchemy

6
推荐指数
1
解决办法
2097
查看次数

标签 统计

json ×2

postgresql ×2

python ×2

sqlalchemy ×2

filter ×1

join ×1