用于在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 OpenShift的齿轮特性   java如何在Liferay站点的每个页面上放置公司地址和电话?   java确定整数数组中是否存在一个子集,在两个条件下求和到给定的目标值   序列化为什么java中的serialVersionUID必须是静态的、最终的、长类型的?   java响应返回null   java注入接口实现Quarkus   java我不明白为什么第二次排序的运行时间比第一次慢?   (Java)显示图像的最佳方式?   java Android应用程序因添加布局而崩溃   java如何在运行时获取泛型变量的类   java Selenium web驱动程序:无效的选择器:*:WebKitFullScreenSentor   Spring中的java注入值始终为空   Eclipse中带有TestNG插件的@BeforeSuite和@AfterSuite的java问题   使用trycatch块、filewriter和printwriter在java中创建自定义类   如何在Java 安卓上绘制相交的两条线