跳转到主要内容

SQLAlchemy JSONField实现,用于在SQL中独立于JSON类型支持存储字典。

项目描述

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实现,用于在SQL中独立于JSON类型支持存储字典。

为什么?

SqlAlchemy为几种数据库类型(目前为PostgreSQL和MySQL)提供了JSON字段支持,以及半工作状态的dict <-> JSON <-> VARCHAR示例,但…在真实场景中,我们有sqlite测试,MySQL/MariaDB/Percona/PostgreSQL的生产,其中一些(现代Oracle MySQL & PostgreSQL)支持JSON,而一些(SQLite、Percona & MariaDB)需要将数据转换为文本(不是VARCHAR)。

此外,数据库和连接器端对Unicode的支持级别不同,因此我们可能对在不同部署之间切换JSON编码感兴趣。

解决方案

SQLAlchemy JSONField具有支持自动在原生JSON和JSON编码数据之间切换的API,并且可以强制执行转换为JSON字符串。

优点

  • 免费软件:Apache许可证

  • 开源:[https://github.com/penguinolog/sqlalchemy_jsonfield](https://github.com/penguinolog/sqlalchemy_jsonfield)

  • 自文档化代码:注释中带有类型的文档字符串

  • 默认使用原生JSON,但允许指定不同的库。

  • 支持多个Python版本

用法

与MariaDB直接使用(示例来自功能测试)

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
    )

使用其他JSON库的用法

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
    )

在PostgreSQL/Oracle MySQL(现代版本)/SQLite(测试)环境中使用时,允许设置 enforce_string=False 并使用原生JSON字段。

测试

该包 sqlalchemy_jsonfield 的主要测试机制是使用 tox。可以通过 tox -l 收集可用的环境。

CI系统

并行使用多个CI系统进行代码检查

  1. GitHub actions:用于检查:PEP8、pylint、bandit、安装可能性和单元测试。

项目详情


下载文件

下载适用于您平台的应用程序。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

SQLAlchemy-JSONField-1.0.2.tar.gz (15.9 kB 查看散列)

上传时间

构建分布

SQLAlchemy_JSONField-1.0.2-py3-none-any.whl (10.2 kB 查看散列)

上传时间 Python 3

由以下机构支持

AWSAWS 云计算和安全赞助商 DatadogDatadog 监控 FastlyFastly CDN GoogleGoogle 下载分析 MicrosoftMicrosoft PSF 赞助商 PingdomPingdom 监控 SentrySentry 错误记录 StatusPageStatusPage 状态页面