用于在sql中存储dict的sqlalchemy jsonfield实现

SQLAlchemy-JSONField的Python项目详细描述


sqlalchemy jsonfield

https://travis-ci.com/penguinolog/sqlalchemy_jsonfield.svg?branch=masterhttps://coveralls.io/repos/github/penguinolog/sqlalchemy_jsonfield/badge.svg?branch=masterhttps://img.shields.io/circleci/project/github/penguinolog/sqlalchemy_jsonfield.svghttps://img.shields.io/pypi/v/sqlalchemy_jsonfield.svghttps://img.shields.io/pypi/pyversions/sqlalchemy_jsonfield.svghttps://img.shields.io/pypi/status/sqlalchemy_jsonfield.svghttps://img.shields.io/github/license/penguinolog/sqlalchemy_jsonfield.svghttps://img.shields.io/badge/code%20style-black-000000.svg

sqlalchemy jsonfield实现,用于独立于json类型支持在sql中存储dict。

为什么?

sqlalchemy为几种数据库类型(目前为postgresql和mysql)提供了json字段支持。 以及半工作dict<;->;json<;->;varchar示例,但是… 在实际场景中,我们对sqlite进行测试,对mysql/mariadb/percona/postgresql进行生产 其中一些(现代oracle mysql&postgresql)支持json, 其中一些(sqlite、percona&;mariadb)需要将数据转换为文本(而不是varchar)。

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

注意

sqlite 3.9本机支持json,sqlalchemy可以处理这个问题。

解决方案:

sqlalchemy jsonfield有支持在本地json和json编码数据之间自动切换的api, 并且可以强制对json字符串进行编码。

优点:

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

用法

直接使用mariadb(从功能测试中提取的示例):

importsqlalchemy_jsonfieldclassExampleTable(Base):__tablename__=table_nameid=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 nowenforce_string=True,# MariaDB connector requires additional parameters for correct UTF-8enforce_unicode=False),nullable=False)

与备用JSON库一起使用:

importsqlalchemy_jsonfieldimportujsonclassExampleTable(Base):__tablename__=table_nameid=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\u string=false 并使用本地json字段。

测试

包的主要测试机制是使用tox。 可用的测试环境:

pep8
py27
py34
py35
py36
py37
pypy
pypy3
pylint
docs

CI系统

对于代码检查,多个ci系统并行使用:

  1. Travis CI:用于检查:pep8、pylint、bandit、安装可能性和单元测试。同时它还出版了关于工作服的报道。
  2. coveralls:用于显示覆盖率。
  3. Circle CI:用于在单独的Docker基础设施上进行功能测试。这个ci用于huge测试。

CD系统

Travis CI:用于pypi上的包传递。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java JPanel不会对键绑定做出反应   当时间大于零时,不得在UI线程上调用java Await   JTextArea的java线程安全。追加   Java用户输入的字和行计数器   java以spreedsheat格式将数据保存到文件中   java构造函数的意义是什么?   java findViewById返回null,尽管组件的ID存在   java如何向按钮添加图像   java如何中断ExecutorService的线程   java如何将属性(例如枚举)绑定到不同类型的组件属性(例如每个枚举的映像)?   随机森林分类器的java实现   html使用java连接到一个站点并发布,HTTP状态代码200   从类访问属性时发生java编译错误   Java自动填充ArrayList,搜索更好的选项