12

现在我正在使用 git 进行 Django 部署,这对我来说似乎很满意。我唯一的问题仍然是如何正确处理数据库中的数据。例如。我经常需要在本地编辑来自生产站点的数据并将数据放回生产站点(请注意我说的是数据更改而不是模式迁移!)。我认为工作流程应该类似于以下内容:在生产站点上转储数据>下载数据>在数据库中加载数据>在本地进行更改>转储数据>为数据制作差异>上传差异并在生产站点上应用更改。

对我来说重要的是,这也适用于对现有数据库行的更改、删除等......

因此,如果我自己开始尝试: 1. 这是否适用于提供的任何数据转储格式?2. 还有其他人像这样工作,也许已经准备好一些(结构)脚本解决方案了吗?

4

4 回答 4

6

我要转储/更改/恢复的表非常小,它们通过公共接口是只读的。使用以下方法:

  1. 数据在服务器上使用 ./manage.py dumpdata 命令转储。
  2. 然后将结果文件提交到服务器上的 VCS。
  3. 我拉取更改并执行 ./manage.py loaddata。
  4. 进行更改后 ./manage 转储数据在本地执行。
  5. 结果文件提交到 VCS 并推送回服务器
  6. ./manage loaddata 命令在服务器上执行

这可以通过 Fabric 实现自动化,例如

1 + 2 + 3 = fab dump_data:cities, 4+5+6 =fab push_data:cities

差异由 VCS 在内部生成。这种方法并不适用于所有情况,但我发现它对简单的情况很有用。

于 2010-08-06T21:15:46.030 回答
2

如果您下载 > 修改 > 上传整个转储,则必须为数据丢失做好准备。在您下载、修改或上传修改后的数据时在生产中创建/修改的任何数据都将丢失

如果您可以修改生产数据库上的数据,避免这种情况的最佳做法是:

  1. 根据本地修改创建 SQL 脚本并在生产数据库上执行,
  2. 创建视图处理数据更改并在生产网络服务器上执行它

或者,如果您无法修改生产数据库上的数据:

  • 创建转储,下载并在本地加载,
  • 在本地修改数据,
  • 创建本地转储,
  • 远程转储与本地转储进行比较,并创建仅包含修改/添加记录的转储
  • 上传并加载

在这种情况下,上传和加载部分会快得多,但您必须以其他方式处理删除。

于 2010-08-11T13:44:50.020 回答
2

1)我知道您不是在谈论架构迁移。然而,有数据迁移这样的事情。我已经使用South对您描述的生产数据进行了更改。调查它可能是值得的。

2)恕我直言,应用差异不是修改数据库转储的最佳方法。与数据库转储相比,差异和合并更适用于源代码/文本。也就是说,我很想知道是否有人成功地对数据库转储进行了差异/补丁/合并。

于 2010-08-06T11:38:41.010 回答
1

如果您的数据库后端是 SQL Server,Red-Gate 有一个您可以使用的数据比较工具。不过,不确定在 SQl Server 世界之外可以使用哪些工具。

于 2010-08-06T13:51:21.577 回答