在Django ORM之外编辑数据库

时间:2016-02-08 15:31:56

标签: python django git postgresql

如果正在使用Django,通过pgadmin或psql直接对数据库(在我的情况下是postgres)进行的更改会发生什么?

迁移如何处理此类更改?他们是否优先考虑ORM认为的事态是什么,或者Django是否会超越它们并强加它自己的变革历史感?

最后,如果有的话,git是如何影响或避免这些问题的呢?

感谢。

2 个答案:

答案 0 :(得分:2)

迁移系统根本不会查看您当前的架构。它从先前迁移的图形和models.py的当前状态构建其图像。这意味着如果您从该系统外部对架构进行更改,它将不同步;如果您随后在models.py中进行等效更改并创建迁移,则在运行它们时可能会出错。

出于这个原因,你应该避免这样做。如果它已经完成,您可以在假模式下应用冲突的迁移,这只是将其标记为已完成而不实际运行针对数据库的代码。但是,首先通过迁移完成所有事情更简单。

git对此没有任何影响,除了重申迁移是代码,并且应该添加到你的git仓库。

答案 1 :(得分:2)

您可以完全从django迁移中排除模型,然后您负责将模式调整为django代码(或django代码到现有模式):

class SomeModel(models.Model):

    class Meta:
        managed = False  
        db_table = "some_table_name"   

    name = models.Fields....

请注意,您无法双向使用,因此在可能的情况下首选迁移。您始终可以定义自定义SQL迁移,这将节省外部更改的需要。但是,有时您确实需要在其他位置处理模式而不是迁移,然后使用managed = False