Database 将数据库对象从一个数据库传输到另一个数据库—;Django/博士后

Database 将数据库对象从一个数据库传输到另一个数据库—;Django/博士后,database,django,merge,Database,Django,Merge,我有一个开发网站和一个Django应用程序的实时网站。数据库中存储了大量前端副本和其他对象详细信息。相反,许多客户机数据也存储在数据库中。准备好开发站点,然后将新副本和对象复制到live server的最有效方法是什么 我想最简单的方法是让可变的开发站点数据与实时站点保持最新,然后更新开发站点,然后将数据转储到实时站点。但是,如果/当有人更新实时站点时会发生什么情况?他们的更新将被覆盖 是否有Django应用程序允许我“检查”管理列表视图中的条目,按“复制”,然后以某种方式将这些条目粘贴到新站点

我有一个开发网站和一个Django应用程序的实时网站。数据库中存储了大量前端副本和其他对象详细信息。相反,许多客户机数据也存储在数据库中。准备好开发站点,然后将新副本和对象复制到live server的最有效方法是什么

我想最简单的方法是让可变的开发站点数据与实时站点保持最新,然后更新开发站点,然后将数据转储到实时站点。但是,如果/当有人更新实时站点时会发生什么情况?他们的更新将被覆盖

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

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


这有点像使用GIT——拥有一个主分支,然后为每个活动站点迭代创建一个分支,然后在活动站点上创建热修复程序,同时仍在开发站点上工作——热修复程序可以合并到开发站点中。如何合并数据?

我不确定是否正确获取了数据,如果我错了,请告诉我:因此,基本上,您希望在生产和开发实例中对(相同)数据进行更改

依我看,这通常不是一个好的解决方案,原因有很多,其中之一就是您提到的需要合并的脆弱性。对我来说,实现这一点的最佳方法实际上是保持两个环境尽可能分离(数据方面)

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

  • 您希望在dev.中使用相同的数据来重现与数据相关的错误。在这种情况下,为什么不简单地转储生产数据库并将其加载到开发人员的机器上呢?IMHO,这个开发数据库应该一直被认为是“可擦除的”
  • 您在生产站点上有一些“初始”数据,这些数据足够通用,在dev中也需要(类似于“性别”表中的男性/女性条目)。在这种情况下,您可以想象使用
在考虑数据流和环境时,您可能还应该看看,数据迁移是一个非常有用的工具

希望这有帮助

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

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

  • 对更改列表视图使用管理操作。这样,您就可以将多个对象从开发系统发布或传输到实时系统
  • 将另一个按钮添加到单个对象的更改视图中。也许是“发布到现场”
  • 在“更改”视图中添加另一个按钮,该按钮可在一个步骤中保存和发布,如“保存并发布到Live site”
要将按钮添加到更改表单,我将覆盖相应的模板:

覆盖块“提交按钮”如下所示

{% block submit_buttons_bottom %}
  {{ block.super }}
  <!-- your buttons here -->
{% endblock %}
{%block submit\u按钮\u bottom%}
{{block.super}}
{%endblock%}
最好只编写一个函数,将对象从dev传输到实时系统。在所有三个用例中使用此功能

但是有一个陷阱


将一个对象从一个Django实例复制到另一个实例可能相当困难。特别是,如果这些对象与其他对象有关系,而其他对象又可能与另一个对象有关系。保持引用完整性应该是一场噩梦。也许有人对此有一个很好的解决方案。

当然-我认为在这种情况下,“捕获”是非常重要的。。。嗯。我不记得为什么我没有把它放在帖子的开头。这是一个相当大的陷阱。但原则上你的问题很有趣。我经常使用企业内容管理系统,他们也有类似的系统。用户不会将内容从预览系统“复制”到实时系统,而是“发布”内容。我在我所有的项目中都使用了South,它确实对数据结构的更改非常有用,而不是实际的数据更改。我认为这样做的方法是为站点的“显示-复制”部分使用固定装置-即按原样设置开发站点-执行任何南迁移,然后应用任何固定装置。诀窍是在执行合并之前,确保开发站点“显示”数据与活动站点是最新的。