当前位置: 首页 > 知识库问答 >
问题:

如何查询JSON元素

南门鸿雪
2023-03-14

假设我有一个Postgres数据库(9.3),有一个名为Resources的表。在参考资料表中,我有字段id,它是int,数据是JSON类型。

假设我在上述表格中有以下记录。

  • 1,{firstname':'Dave',lastname':'Gallant}

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

我试着这样写:

records = db_session.query(Resource).filter(Resources.data->>'lastname' == "Doe").all()

然而,Py魅力给了我一个关于“-”的编译错误

有人知道我将如何编写过滤子句来完成我需要的任务吗?

共有3个答案

华星驰
2023-03-14

如果您使用的是JSON类型(不是JSONB),以下内容对我有用:

注意“object”(对象

    query = db.session.query(ProductSchema).filter(
        cast(ProductSchema.ProductJSON["type"], db.String) != '"object"'
    )
锺离明煦
2023-03-14

您还可以将字符串显式转换为JSON(请参阅Postgres JSON类型doc)。

from sqlalchemy.dialects.postgres import JSON
from sqlalchemy.sql.expression import cast
db_session.query(Resource).filter(
    Resources.data["lastname"] == cast("Doe", JSON)
).all()
秋光熙
2023-03-14

尝试使用astext

records = db_session.query(Resource).filter(
              Resources.data["lastname"].astext == "Doe"
          ).all()

请注意,该列必须具有JSONB类型。常规JSON列将不起作用。

 类似资料:
  • 最近升级到使用PostgreSQL 9.3.1来利用JSON功能。在我的表中,我有一个json类型列,其结构如下: 就问题而言,这只是虚拟数据。 是否可以根据id查询电子邮件数组中的特定项目 差不多:“返回id=123的电子邮件)”?

  • 问题内容: 最近升级到使用PostgreSQL 9.3.1来利用JSON功能。在我的表中,我有一个json类型列,其结构如下: 就问题而言,这只是伪数据。 是否可以根据id在emails数组中查询特定项目? 差不多:“返回电子邮件,其中id = 123)”? 问题答案: 是的,这是可能的: 是您的表名,是JSON列的名称。

  • 问题内容: 我正在尝试测试PostgreSQL 9.3中的类型。 我在名为的表中有一个列。JSON看起来像这样: 我想查询表中所有与“对象”数组中“ src”值匹配的报告。例如,是否可以在数据库中查询所有匹配的报告?我成功地写了一个查询,可以匹配: 但是由于具有一组值,所以我似乎无法编写出有效的东西。是否可以在数据库中查询所有匹配的报告?我已经查看了这些来源,但仍然无法了解: http://www

  • 我试图测试PostgreSQL 9.3中的类型。 我在一个名为的表中有一个名为的列。JSON如下所示: 我想查询表中与'objects'数组中的'src'值匹配的所有报告。例如,是否可以查询数据库中匹配的所有报告?我成功地编写了一个可以匹配的查询: null 我不是SQL专家,所以我不知道我做错了什么。

  • 我将一些代码从Gson改为Jackson,在那里我必须检查当前元素的类型是否是原语。 我可以用Gson做这样的事情: 在Jackson中,Json节点类型是

  • 我编写的应用程序需要json格式的数据,但获取的数据没有标题 型号: 存储库: 服务 控制器: 在输出上,我得到以下数据: 但我需要这种格式的数据: 有人能解释一下怎么做吗?我认为问题是因为我返回了字符串,但如何用本机查询返回Json对象呢?