带有sqlalchemy嵌套更改跟踪的json类型

sqlalchemy-json的Python项目详细描述


sqlalchemy json为SQLAlchemy

  • MutableJson是一个简单的实现,用于跟踪对json对象的顶级更改;
  • NestedMutableJson是this的一个扩展,它可以跟踪在嵌套对象或数组(pythondictslists)中发生的更改。

示例

基本变更跟踪

这本质上就是sqlalchemymutable JSON recipe。我们定义了一个简单的author模型,该模型列出了作者的姓名以及使用的各种社交媒体句柄的属性handles

classAuthor(Base):name=Column(Text)handles=Column(MutableJson)

下面的示例加载了一个现有的作者,并检索了社交媒体句柄的映射。然后纠正并提交twitter句柄中的错误。sqlalchemy检测到更改,并生成相应的UPDATE语句。

>>>author=session.query(Author).first()>>>author.handles{'twitter':'@JohnDoe','facebook':'JohnDoe'}>>>author.handles['twitter']='@JDoe'>>>session.commit()>>>author.handles{'twitter':'@JDoe','facebook':'JohnDoe'}

嵌套更改跟踪

下面的示例定义了一个简单的文章模型。此模型的属性之一是一个名为references的可变json结构,它包含文章包含的链接计数,按域分组:

classArticle(Base):author=Column(ForeignKey('author.name'))content=Column(Text)references=Column(NestedMutableJson)

在此就绪,加载现有的文章并检查其当前引用。然后,其中一个的计数增加10,会话被提交:

>>>article=session.query(Article).first()>>>article.references{'github.com':{'edelooff/sqlalchemy-json':4,'zzzeek/sqlalchemy':7}}>>>article.references['github.com']['edelooff/sqlalchemy-json']+=10>>>session.commit()>>>article.references{'github.com':{'edelooff/sqlalchemy-json':14,'zzzeek/sqlalchemy':7}}

如果articles模型使用MutableJson,就像前面的示例中那样,那么这段代码将失败。这是因为顶级词典从来没有直接修改过。嵌套的可变的可以确保在较低的级别发生的更改会冒泡到最外层的容器。

依赖关系

  • ^ TT9}$,用于其现有的和数据库引擎特定的本地或模拟JSON类型的选择;
  • six同时支持python 2和3。

更改日志

0.2.2

0.2.1

  • 修复了将0.2.0上载到pypi后在自述文件中发现的一个错误。

0.2.0(未发布)

  • 现在使用SQLAlchemy-utils提供的JSONType来处理后端存储;
  • 向后不兼容:将类名JsonObject更改为MutableJson,将NestedJsonObject更改为NestedMutableJson
  • NestedMutableJson的最外层容器现在可以是array(pythonlist

0.1.0(未发布)

初始版本。它最初的版本号是1.0.0,但从未在pypi上发布过。

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

推荐PyPI第三方库


热门话题
java我是否正确地实现了广告,为什么没有显示?   java Maven编译器插件与Maven默认插件?   java如何通过在Hibernate中引入二级缓存来解决N+1问题?   java如何在Android中绘制位图   java再次关闭这个“FileOutputStream”声纳   Java Android Studio应用程序开发NullPointerException。我的应用程序强制在加载第二个活动时关闭   java无法使用与postman应用程序中相同的restTemplate发送请求   java为计算器拆分输入字符串   java底部导航栏未显示在活动中   java XML读取具有不同段的相同标记   java从文本文件中添加值   java将外部JAR与插件库目录分离   spock框架中的java高级助手方法   azure ADAL for Java Proxy   java如何使用Apache httpclient 4为每个请求设置超时。*使用PoollightTPClientConnectionManager?