Skip to main content

Add jsonb type to CubicWeb

Project description

Add a new attribue type to CubicWeb: Jsonb. This type is mapped to the jsonb PostgreSQL data type.

Declaration

In your schemas, you can use the new type as follow:

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

Get/Set

To provide a value for a Jsonb attribute, you can use either:

  • a dict,

  • a JSON string.

For example, you can write the following code:

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

The code below wil have exactly the same effect:

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

Please note that, whatever way you set the value (string or dict), you will always get back a dict when asking for it:

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

Querying

In RQL, you can query a Jsonb attribute in multiple ways. For example, you can ask for attributes containing a specific key/value pair:

>>> 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})})

You can ask for existence of a specific key:

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

You can get the value for a key:

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

Note: JSONB_GET() will always return a string. If the value is a JSON object (or a JSON array), you may want to use json.loads() afterwards to have a dict (or a list).

One final remark: as the PostgreSQL documentation suggests, you should use the same structure for your JSON data in the same column. This makes querying much easier.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cubicweb-jsonb-0.4.0.tar.gz (9.5 kB view details)

Uploaded Source

Built Distribution

cubicweb_jsonb-0.4.0-py3-none-any.whl (7.5 kB view details)

Uploaded Python 3

File details

Details for the file cubicweb-jsonb-0.4.0.tar.gz.

File metadata

  • Download URL: cubicweb-jsonb-0.4.0.tar.gz
  • Upload date:
  • Size: 9.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.10.2

File hashes

Hashes for cubicweb-jsonb-0.4.0.tar.gz
Algorithm Hash digest
SHA256 9593dfdf325d519632231ee06624f3bbbea86a5f0d44592c175ae26a0d5a51d1
MD5 a6652d464aaf18093caca98f52e7f898
BLAKE2b-256 11c3097ccceaa9f524cabd6d35ea2ea1229e95145df4f74924d602f90532f943

See more details on using hashes here.

File details

Details for the file cubicweb_jsonb-0.4.0-py3-none-any.whl.

File metadata

File hashes

Hashes for cubicweb_jsonb-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d46ddb78fc45e33441783c56d7da07bc718cfa5aefbc4765ea06a5d77ef577e6
MD5 16577222efecc7062b23c00e17993993
BLAKE2b-256 d66e10d8f358bbe824afb02057246d683193ac72d34fc0335a5374693a9cf5b3

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page