未知

praekelt-python-gitmodel的Python项目详细描述


python的分布式版本化数据存储

python gitmodel是一个使用git进行版本控制来持久化对象的框架。 和远程同步

为什么?

根据Git’s README,git是一个“愚蠢的内容跟踪器”。那意味着你 不限于在git中存储源代码。这个项目的目标是 提供一个对象级接口,将git用作无模式数据存储,如 以及利用git强大的版本控制功能的工具

python gitmodel允许您使用python对数据建模,并提供 易于使用的接口,用于将数据存储为git对象。

python gitmodel基于libgit2,这是git核心的纯c实现 方法。这意味着,我们不通过shell调用git命令,而是 以本机速度使用git。

有什么了不起的?

  • 无架构数据存储
  • 永远不要丢失数据历史是永久保存的,可以使用git工具恢复。
  • 分支并合并生产数据
    • python gitmodel可以使用不同的分支
    • 数据的分支或标记快照
    • 使用分支测试生产数据,例如,测试迁移
  • 非常适合内容驱动应用程序

示例用法

下面我们将介绍一个基本的平页CMS的用例

基本模型创建:

fromgitmodel.workspaceimportWorkspacefromgitmodelimportfieldsws=Workspace('path/to/my-repo/.git')classPage(ws.GitModel):slug=fields.SlugField()title=fields.CharField()content=fields.CharField()published=fields.BooleanField(default=True)

工作区可以看作是您的git工作目录。它还充当 “瓷”层到Pygit2的“管道”。与工作相反 目录,工作区类不使用存储库的索引和 头文件,而是在内存中跟踪这些

保存对象:

page=Page(slug='example-page',title='Example Page')page.content='<h2>Here is an Example</h2><p>Lorem Ipsum</p>'page.save()print(page.id)# abc99c394ab546dd9d6e3381f9c0fb4b

默认情况下,对象获取一个自动ID字段,该字段保存为python UUID hex (不要将这些与git散列混淆)。您可以轻松自定义 您的模型充当id字段,例如:

classPage(ws.GitModel):slug=fields.SlugField(id=True)# ORclassPage(ws.GitModel):slug=fields.SlugField()classMeta:id_field='slug'

默认情况下,对象不会提交到存储库不过,他们是, 作为树和blob写入对象数据库。Workspace.index 对象是保存未提交数据的pygit2.Tree这是安纳戈斯 git的索引,但指针存储在内存中。

创建提交很简单:

oid=page.save(commit=True,message='Added an example page')commit=ws.repo[oid]# a pygit2.Commit objectprint(commit.message)

您可以使用pygit2访问以前的提交,甚至可以查看两个提交之间的差异 对象的版本。

# walking commitsforcommitinws.walk():print("{}: {}".format(commit.hex,commit.message))# get a diff between two commitshead_commit=ws.branch.commitprev_commit_oid=head_commit.parents[0]print(prev_commit.diff(head_commit))

对象可以通过其id轻松检索:

page=Page.get('example-page')print(page.content)

警告清空器

git本身的性能不太好。如果需要git支持的数据 在生产环境中表现出色,你需要让它成为一个“僚机”。 由于python gitmodel可以以多种方式使用,因此 决定优化它的最佳方法。

状态

这个项目正在大力开发中,API可能会改变 在1.0发布之前。当前仅创建基本模型 保存实例也会起作用

待办事项

  • 缓存?
  • 标引?
  • 查询API?
  • 完整文档

python gitmodel的灵感来自Rick Olson的演讲,“Git, the Stupid NoSQL Database”和Paul Downman的GitModelfor ruby

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

推荐PyPI第三方库


热门话题
在java中获取匹配正则表达式的正则表达式   安卓 studio中与xamm服务器的java连接失败   java如何在将文档提交给客户端后删除它   java如何在第一个实体是具有指定主键的实体之后的下一个实体时使用JPA获取列表   java通过向扫描器传递文件来填充命令行   Spring中的java Hibernate对象   java更改JXL单元格的maxFractionDigit   java如何使用Firebase数据库和不同的视图持有者根据类型(视频、文本、图像)恢复数据?   java获取FTP服务器上的文件   java Spring Boot MVC RestTemplate:在何处为MVC应用程序初始化RestTemplate以使用远程RESTful服务   当springcloudstarterkubernetesconfig作为依赖项添加时,会引发java Kubernetes客户端(证书)异常   Java嵌套类的可见性是如何工作的?   java试图要求用户提供行、列、深度,以使三维板无法工作?   Tomcat9中的java,可以通过编程关闭AutoDeploy   安卓将ListView项从Java布局迁移到LayoutInflater   java中是否真的有一个无止境的循环?   java如何使用JTextArea向JTabbedPane添加新选项卡   将链表添加到双链表(java)中?   java随机数生成总是返回相同的值   带有组合框的java动态JQuery下拉列表