用于在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 recyclerview在上下滚动时工作不正常   java如何计算两个向量之间的角度?   Netbeans:java。lang.UnsatifiedLinkError:java中没有splashscreen。图书馆路径:   java我希望在一个方法中包含两个数组列表   linkedHashSet中的java重复项索引   java最有效的分句方法   java多个编写器一个读取器而不并发   java调用LockSupport时线程的状态。unpark()   带有开放JDK和Tomcat 9.0的Struts 2的java Servlet API转换问题   java如何将ArrayList分配给列表?   javasound java for loop的执行次数超过了metronome程序的执行次数   java OKTA在命中/groups端点时返回400错误   java IntelliJ IDEA添加库和maven依赖之间的区别   java将hashmap值交换为键   java将EBNF语法转换为上下文无关语法   适用于安卓的java Zxing条形码匹配应用程序   java kSoap2多部分/相关响应   安全java小程序socket连接问题   在线Java书籍   java使aspectj与scala模型一起工作