Skip to main content

SQLALchemy JSONField implementation for storing dicts at SQL

Project description

SQLAlchemy-JSONField

https://travis-ci.com/penguinolog/sqlalchemy_jsonfield.svg?branch=master https://coveralls.io/repos/github/penguinolog/sqlalchemy_jsonfield/badge.svg?branch=master https://img.shields.io/circleci/project/github/penguinolog/sqlalchemy_jsonfield.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 miltiple Python versions:

Python 2.7
Python 3.4
Python 3.5
Python 3.6
Python 3.7
PyPy
PyPy3

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. Test environments available:

pep8
py27
py34
py35
py36
py37
pypy
pypy3
pylint
docs

CI systems

For code checking several CI systems is used in parallel:

  1. Travis CI: is used for checking: PEP8, pylint, bandit, installation possibility and unit tests. Also it’s publishes coverage on coveralls.

  2. coveralls: is used for coverage display.

  3. Circle CI: is used for functional tests at separate docker infrastructure. This CI used for HUGE tests.

CD system

Travis CI: is used for package delivery on PyPI.

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-0.8.0.tar.gz (31.9 kB view details)

Uploaded Source

Built Distribution

SQLAlchemy_JSONField-0.8.0-py2.py3-none-any.whl (10.2 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file SQLAlchemy-JSONField-0.8.0.tar.gz.

File metadata

  • Download URL: SQLAlchemy-JSONField-0.8.0.tar.gz
  • Upload date:
  • Size: 31.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 PyPy/5.10.1

File hashes

Hashes for SQLAlchemy-JSONField-0.8.0.tar.gz
Algorithm Hash digest
SHA256 d0195c2ce97313ab1875585a3017035cc1671236faef4ca2c88600690f31e5ad
MD5 6f63b056ff4e42c7e2d5e208f97c9b9c
BLAKE2b-256 6789d52c623c9fffa6b016223e82ea69cff310143fa1239afe2c578ba3423bab

See more details on using hashes here.

File details

Details for the file SQLAlchemy_JSONField-0.8.0-py2.py3-none-any.whl.

File metadata

  • Download URL: SQLAlchemy_JSONField-0.8.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 10.2 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 PyPy/5.10.1

File hashes

Hashes for SQLAlchemy_JSONField-0.8.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 ffbef8af92cc25f7cebc9e05ac6a1dfc71e5366f74bed0814cc539328400d93f
MD5 d3d63f3ce1c47c651be5f505a8dc3080
BLAKE2b-256 11b6477f78cd797c6a8bc98236c7280952ed9daa1830d99072fbdaa2b2e3a89c

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