【问题标题】:Django Deployment: Handling data in databaseDjango 部署:处理数据库中的数据
【发布时间】:2011-03-26 07:02:58
【问题描述】:

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

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

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

【问题讨论】:

  • 你在本地修改的数据有可能同时在服务器上被修改吗?能否创建一个界面,让您可以直接在生产服务器上编辑数据?

标签: database django deployment fabric


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 所以您还可以毫无问题地将转储的 (JSON) 数据与 VCS 合并?我正在寻找一种方法,使我能够例如。将更改的数据推送到服务器上,同时在生产系统上也进行更改?我认为理论上合并 JSON 数据应该可行 - 我只是好奇是否有人这样处理它!
  • 我没有尝试这个,因为我的表格很少改变。但它可能确实有效:在推送本地更改之前再次转储&提交&拉动&合并。
【解决方案2】:

1) 我知道您不是在谈论架构迁移。然而,存在诸如数据迁移之类的东西。我已经使用South 对您描述的生产数据进行了更改。调查一下可能值得您花时间。

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

【讨论】:

  • 1) 是的,到目前为止,我正在使用 South 进行架构迁移,发现它对数据来说有点不方便。 2)这正是我的观点,从未尝试过,但很好奇差异是否可以与 json/xml 无论转储一起使用! (当然不是用sql)。而且“差异”可能不仅在 unix 意义上 :)
  • 2) 我相信有一些工具可用于 XML 差异等。虽然从未使用过它们。如果您发现有用的东西,请在此处发布!
【解决方案3】:

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

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

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

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

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

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2011-11-03
      • 1970-01-01
      • 2015-04-22
      • 2021-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-12
      • 1970-01-01
      相关资源
      最近更新 更多