将数据库对象从一个DB传输到另一个DB - Django / Postgres

时间:2012-08-21 09:40:45

标签: database django merge

我有一个开发网站和我的Django应用程序的实时网站。许多前端拷贝和其他对象细节都存储在DB中。相反,许多客户端数据也存储在DB中。让dev站点准备好然后将新副本和对象复制到实时服务器的最有效方法是什么?

我想最简单的方法是让可更改的开发站点数据与实时站点保持同步,然后更新开发站点,然后将数据转储到实际站点。但是,当有人在发生这种情况时更新现场网站时会发生什么?他们的更新将被覆盖。

是否有Django应用程序允许我在管理列表视图中“检查”条目,按“复制”然后以某种方式将这些条目粘贴到新网站中?

或者人们在这种常见场景中使用的其他模式是什么?

这有点像使用GIT - 拥有一个主分支,然后是每个实时站点迭代的分支,然后在实际站点上创建热修复,同时仍然在开发站点上工作 - 该修补程序可以合并到开发站点。我们如何合并数据?

2 个答案:

答案 0 :(得分:0)

我不确定我是否正确,请告诉我,如果我错了:基本上,你想在生产和开发实例中对(相同)数据进行更改?

恕我直言,由于许多原因,这通常不是一个好的解决方案,其中一个原因就是这个脆弱的需要合并你提到的。对我而言,实现这一目标的最佳方法实际上是将两个环境尽可能分离(数据方式)。

不惜一切代价避免的部分,恕我直言,这是最终的开发 - 生产合并。我可以更好地理解向另一个方向转移的需要(从prod到dev)。我可以在这里看到两个常见的情况:

  • 您想在开发中使用相同的数据。尝试重现与数据相关的错误。在这种情况下,为什么不简单地转储生产数据库并将其加载到开发人员。机器?恕我直言,这个开发。数据库应始终被视为“可擦除”。
  • 您在生产网站上有一些“初始”数据,这些数据非常通用,在开发中也是必需的(类似于“性别”表中的男性/女性条目)。在这种情况下,您可以想象使用Fixtures

在考虑数据流和环境时,您可能还应该看一下South,数据迁移是非常有用的工具。

希望这有帮助!

答案 1 :(得分:0)

  

是否有Django应用程序允许我在管理列表视图中“检查”条目,按“复制”然后以某种方式将这些条目粘贴到新网站中?

不是我知道的。但我认为你可以用合理的努力来编写这样的应用程序。我建议如下:

  • 将管理操作用于更改列表视图。这样,您就可以发布多个对象从开发系统传输到您的实时系统。 See the documentation for further information
  • 将另一个按钮添加到单个对象的更改视图。也许“发布到现场”。
  • 更改视图添加另一个按钮,可以一步保存和发布,例如“保存并发布到Live网站”。

要在更改表单中添加按钮,我会覆盖相应的模板:

http://code.djangoproject.com/svn/django/trunk/django/contrib/admin/templates/admin/change_form.html

覆盖块'submit_buttons_bottom',如

{% block submit_buttons_bottom %}
  {{ block.super }}
  <!-- your buttons here -->
{% endblock %}

最好只编写一个函数来完成将对象从开发人员转移到实时系统的工作。在所有三种使用案例中使用此功能。

但有一个问题!

将一个Django实例中的一个对象复制可能相当困难。尤其如此,如果这些对象与其他对象有关系,那么这些对象又可能与另一个对象有关系。保留参照完整性应该是一场噩梦。也许某人有一个很好的解决方案。