跳转到主要内容

用于轻松同步/比较/更新两个不同数据源的库

项目描述

DiffSync

DiffSync是一个实用库,可用于比较和同步不同的数据集。

例如,它可以用来比较两个库存系统中设备列表,并在需要时在任一方向上同步它们。

主要用例

当您有多个数据源或数据集需要比较和/或同步时,DiffSync最有用,尤其是如果以下任何一项为真

  • 如果您需要反复比较或同步数据集,因为它们随着时间的推移而改变。
  • 如果您需要考虑到新记录的创建,以及现有记录的更改和删除。
  • 如果您的数据集中的各种类型的数据与其他数据自然形成树形或父子关系。
  • 如果不同的数据集有一些共同的属性,以及一些只属于其中一个的属性。

DiffSync概述

DiffSync充当您正在比较和/或同步的所有数据集之间的中间翻译层。在实践中,这意味着要使用DiffSync,您将定义一组数据模型以及将每个基础数据源和数据模型之间进行转换所需的“适配器”。用Python的话说,适配器将是Adapter类的子类,每个数据模型类将是DiffSyncModel类的子类。

Diffsync Components

一旦您使用每个适配器将每个数据源加载到数据模型记录的集合中,您就可以请求DiffSync对这两个数据集进行“差异比较”,它将生成它们之间差异的结构化表示。在Python中,这通过在一个适配器上调用diff_to()diff_from()方法并传递另一个适配器作为参数来完成。

Diffsync Diff Creation

您还可以请求DiffSync将一个数据集同步到另一个数据集,它将指导您的适配器执行必要的步骤以确保其数据集准确反映另一个数据集。在Python中,这通过在一个适配器上调用sync_to()sync_from()方法并传递另一个适配器作为参数来完成。

Diffsync Sync

简单示例

A = DiffSyncSystemA()
B = DiffSyncSystemB()

A.load()
B.load()

# Show the difference between both systems, that is, what would change if we applied changes from System B to System A
diff_a_b = A.diff_from(B)
print(diff_a_b.str())

# Update System A to align with the current status of system B
A.sync_from(B)

# Update System B to align with the current status of system A
A.sync_to(B)

您可以通过查看diffsync GitHub主题来了解使用此库的项目示例。

文档

文档可在Read The Docs上找到。

安装

选项1:从PyPI安装。

$ pip install diffsync

选项2:从GitHub分支安装,例如以下所示的main。

$ pip install git+https://github.com/networktocode/diffsync.git@main

贡献

欢迎提交拉取请求,并通过GitHub Actions自动构建和测试多个版本的Python。

该项目遵循Network to Code软件开发指南,并利用以下工具

  • Black、Pylint、Bandit、flake8和pydocstyle,以及mypy进行Python代码审查、格式化和类型提示检查。
  • pytest、coverage和unittest进行单元测试。

您可以通过从CLI运行invoke tests来确保您的贡献符合这些检查。命令invoke build在本地构建一个包含所有必要依赖项(包括redis后端)的Docker容器,以方便执行这些测试。

问题

请参阅文档以获取有关如何使用diffsync的详细信息。对于任何其他问题或评论,请随时访问Network to Code Slack频道(频道#networktocode)。在此注册

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

diffsync-2.0.0.tar.gz (31.7 kB 查看哈希值)

上传时间

构建分布

diffsync-2.0.0-py3-none-any.whl (39.8 kB 查看哈希值)

上传时间 Python 3

由以下支持