用于在sql中存储dict的sqlalchemy jsonfield实现
SQLAlchemy-JSONField的Python项目详细描述
sqlalchemy jsonfield
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字符串进行编码。
优点:
- 免费软件:apache许可证
- 开源:https://github.com/penguinolog/sqlalchemy_jsonfield
- 自编代码:注释中包含类型的docstrings
- 默认情况下使用本机json,但允许指定不同的库。
- 支持Miltiple Python版本:
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系统并行使用:
- Travis CI:用于检查:pep8、pylint、bandit、安装可能性和单元测试。同时它还出版了关于工作服的报道。
- coveralls:用于显示覆盖率。
- Circle CI:用于在单独的Docker基础设施上进行功能测试。这个ci用于huge测试。
CD系统
Travis CI:用于pypi上的包传递。