跳转到主要内容

将 jsonb 类型添加到 CubicWeb

项目描述

将新的属性类型添加到 CubicWeb: Jsonb。此类型映射到 jsonb PostgreSQL 数据类型

声明

在您的模式中,您可以使用以下方式使用新类型

>>> class MyEntityType(EntityType):
...     json_attribute = Jsonb(required=True)
...

获取/设置

要为 Jsonb 属性提供值,您可以使用以下方式

  • 一个字典,

  • 一个 JSON 字符串。

例如,您可以编写以下代码

>>> my_entity.cw_set(json_attribute={'a': [1, 2, 3]})

以下代码将产生完全相同的效果

>>> my_entity.cw_set(json_attribute=u'{"a": [1, 2, 3]}')

请注意,无论您以何种方式设置值(字符串或字典),您在请求它时都将始终返回一个字典

>>> my_entity.json_attribute
{u'a': [1, 2, 3]}

查询

在 RQL 中,您可以通过多种方式查询 Jsonb 属性。例如,您可以请求包含特定键/值对的属性

>>> import json
>>> rql('Any X WHERE X json_attribute J HAVING JSONB_CONTAINS(J, %(json_value)s)=True',
        {'json_value': json.dumps({u'a': 1})})

您可以请求存在特定的键

>>> rql('Any X WHERE X json_attribute J HAVING JSONB_EXISTS(J, %(key)s)=True',
        {'key': u'b'})

您可以获取键的值

>>> rql('Any JSONB_GET(J, %(key)s) WHERE X json_attribute J, X eid %(eid)s',
        {'key': u'a', 'eid': 1234})

注意: JSONB_GET()始终 返回一个字符串。如果值是 JSON 对象(或 JSON 数组),您可能希望之后使用 json.loads() 以获得字典(或列表)。

最后一点:如 PostgreSQL 文档建议,您应使用相同的结构在同一个列中存储您的 JSON 数据。这使得查询更加容易。

项目详情


下载文件

下载适合您的平台的文件。如果您不确定选择哪个,请了解有关 安装软件包 的更多信息。

源代码分发

cubicweb-jsonb-0.4.0.tar.gz (9.5 kB 查看哈希值)

上传时间 源代码

构建分发

cubicweb_jsonb-0.4.0-py3-none-any.whl (7.5 kB 查看哈希值)

上传时间 Python 3

支持者