123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- Metadata-Version: 2.1
- Name: SQLAlchemy-JSONField
- Version: 1.0.2
- Summary: SQLALchemy JSONField implementation for storing dicts at SQL
- Author-email: Alexey Stepanov <penguinolog@gmail.com>
- License: Apache-2.0
- Project-URL: Repository, https://github.com/penguinolog/sqlalchemy_jsonfield
- Project-URL: Bug Tracker, https://github.com/penguinolog/sqlalchemy_jsonfield/issues
- Keywords: sql,sqlalchemy,json,jsonfield,development
- Classifier: Development Status :: 4 - Beta
- Classifier: Intended Audience :: Developers
- Classifier: Topic :: Software Development :: Libraries :: Python Modules
- Classifier: License :: OSI Approved :: Apache Software License
- Classifier: Programming Language :: Python :: 3
- Classifier: Programming Language :: Python :: 3.7
- Classifier: Programming Language :: Python :: 3.8
- Classifier: Programming Language :: Python :: 3.9
- Classifier: Programming Language :: Python :: 3.10
- Classifier: Programming Language :: Python :: 3.11
- Classifier: Programming Language :: Python :: 3.12
- Classifier: Programming Language :: Python :: Implementation :: CPython
- Classifier: Programming Language :: Python :: Implementation :: PyPy
- Requires-Python: >=3.7.0
- Description-Content-Type: text/x-rst
- License-File: LICENSE
- Requires-Dist: sqlalchemy
- SQLAlchemy-JSONField
- ====================
- .. image:: https://github.com/penguinolog/sqlalchemy_jsonfield/workflows/Python%20package/badge.svg
- :target: https://github.com/penguinolog/sqlalchemy_jsonfield/actions
- .. image:: https://img.shields.io/pypi/v/sqlalchemy_jsonfield.svg
- :target: https://pypi.python.org/pypi/sqlalchemy_jsonfield
- .. image:: https://img.shields.io/pypi/pyversions/sqlalchemy_jsonfield.svg
- :target: https://pypi.python.org/pypi/sqlalchemy_jsonfield
- .. image:: https://img.shields.io/pypi/status/sqlalchemy_jsonfield.svg
- :target: https://pypi.python.org/pypi/sqlalchemy_jsonfield
- .. image:: https://img.shields.io/github/license/penguinolog/sqlalchemy_jsonfield.svg
- :target: https://raw.githubusercontent.com/penguinolog/sqlalchemy_jsonfield/master/LICENSE
- .. image:: https://img.shields.io/badge/code%20style-black-000000.svg
- :target: https://github.com/ambv/black
- 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.
- .. note:: SQLite 3.9 supports JSON natively and SQLAlchemy can handle this.
- 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):
- .. code-block:: python
- 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:
- .. code-block:: python
- 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: <https://github.com/penguinolog/sqlalchemy_jsonfield/actions>`_ is used for checking: PEP8, pylint, bandit, installation possibility and unit tests.
|