带有sqlalchemy嵌套更改跟踪的json类型
sqlalchemy-json的Python项目详细描述
sqlalchemy json为SQLAlchemy:
- MutableJson是一个简单的实现,用于跟踪对json对象的顶级更改;
- NestedMutableJson是this的一个扩展,它可以跟踪在嵌套对象或数组(pythondicts和lists)中发生的更改。
示例
基本变更跟踪
这本质上就是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
- 修复了将None分配给列导致错误(https://github.com/edelooff/sqlalchemy-json/issues/10)
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上发布过。