Skip to main content

SQLALchemy JSONField implementation for storing dicts at SQL

Project description

SQLAlchemy-JSONField

https://github.com/penguinolog/sqlalchemy_jsonfield/workflows/Python%20package/badge.svg https://img.shields.io/pypi/v/sqlalchemy_jsonfield.svg https://img.shields.io/pypi/pyversions/sqlalchemy_jsonfield.svg https://img.shields.io/pypi/status/sqlalchemy_jsonfield.svg https://img.shields.io/github/license/penguinolog/sqlalchemy_jsonfield.svg https://img.shields.io/badge/code%20style-black-000000.svg

SQLALchemy JSONField implementation for storing dicts at SQL independently from JSON type support.

Why?

SqlAlchemy provides JSON field support for several database types (PostgreSQL and MySQL for now) and semi-working dict <-> JSON <-> VARCHAR example, but… In real scenarios we have tests on sqlite, production on MySQL/MariaDB/Percona/PostgreSQL and some of them (modern Oracle MySQL & PostgreSQL) support JSON, some of them (SQLite, Percona & MariaDB) requires data conversion to Text (not VARCHAR).

As addition, we have different levels of Unicode support on database and connector side, so we may be interested to switch JSON encoding between deployments.

Solution:

SQLALchemy JSONField has API with suport for automatic switch between native JSON and JSON encoded data, and encoding to JSON string can be enforced.

Pros:

  • Free software: Apache license

  • Open Source: https://github.com/penguinolog/sqlalchemy_jsonfield

  • Self-documented code: docstrings with types in comments

  • Uses native JSON by default, but allows to specify different library.

  • Support multiple Python versions

Usage

Direct usage with MariaDB (example extracted from functional tests):

import sqlalchemy_jsonfield

class ExampleTable(Base):
    __tablename__ = table_name
    id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True)
    row_name = sqlalchemy.Column(
        sqlalchemy.Unicode(64),
        unique=True,
    )
    json_record = sqlalchemy.Column(
        sqlalchemy_jsonfield.JSONField(
            # MariaDB does not support JSON for now
            enforce_string=True,
            # MariaDB connector requires additional parameters for correct UTF-8
            enforce_unicode=False
        ),
        nullable=False
    )

Usage with alternate JSON library:

import sqlalchemy_jsonfield
import ujson

class ExampleTable(Base):
    __tablename__ = table_name
    id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True)
    row_name = sqlalchemy.Column(
        sqlalchemy.Unicode(64),
        unique=True,
    )
    json_record = sqlalchemy.Column(
        sqlalchemy_jsonfield.JSONField(
            enforce_string=True,
            enforce_unicode=False,
            json=ujson,  # Use ujson instead of standard json.
        ),
        nullable=False
    )

Usage on PostgreSQL/Oracle MySQL(modern version)/SQLite(testing) environments allows to set enforce_string=False and use native JSON fields.

Testing

The main test mechanism for the package sqlalchemy_jsonfield is using tox. Available environments can be collected via tox -l

CI systems

For code checking several CI systems is used in parallel:

  1. GitHub actions: is used for checking: PEP8, pylint, bandit, installation possibility and unit tests.

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

SQLAlchemy-JSONField-1.0.1.post0.tar.gz (20.1 kB view details)

Uploaded Source

Built Distribution

SQLAlchemy_JSONField-1.0.1.post0-py3-none-any.whl (10.1 kB view details)

Uploaded Python 3

File details

Details for the file SQLAlchemy-JSONField-1.0.1.post0.tar.gz.

File metadata

File hashes

Hashes for SQLAlchemy-JSONField-1.0.1.post0.tar.gz
Algorithm Hash digest
SHA256 72a5e714fe0493d2660abd7484a9fd9f492f493a0856288dd22a5decb29f5dc4
MD5 55818af3c840eb1911a80e530bacf8ae
BLAKE2b-256 2a97367a46033f71ee057b789f76c0801a7d4537ea4401e702875b578a17989d

See more details on using hashes here.

File details

Details for the file SQLAlchemy_JSONField-1.0.1.post0-py3-none-any.whl.

File metadata

File hashes

Hashes for SQLAlchemy_JSONField-1.0.1.post0-py3-none-any.whl
Algorithm Hash digest
SHA256 d6f1e5ee329a3c0d9d164e40d81a2143ac8332e09988fbbaff84179dac5503d4
MD5 9ef26859b0cfe933ba6a0cc77e6ca2bd
BLAKE2b-256 381c283e6216c21827fb1358f2f409432828f9df4e402182cf590a1cc5a8874f

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