在Django ORM外部编辑数据库

2024-10-01 00:21:51 发布

您现在位置:Python中文网/ 问答频道 /正文

如果使用Django,那么通过pgadmin或psql直接对数据库(在我的例子中是postgres)所做的更改会发生什么?在

迁移如何处理这些更改?它们是优先于ORM认为的状态,还是Django凌驾于它们之上,并强加它自己的改变历史感?在

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

谢谢。在


Tags: djangogit数据库状态ormpostgres例子psql
2条回答

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

class SomeModel(models.Model):

    class Meta:
        managed = False  
        db_table = "some_table_name"   

    name = models.Fields....

请注意,您不能同时拥有这两种方法,因此在可能的情况下最好进行迁移。您总是可以定义一个自定义的SQL迁移,这将节省对外部更改的需要。但是,有时确实需要在别处处理模式而不是迁移,然后使用managed=False

迁移系统根本不查看您当前的模式。它根据以前的迁移和当前的状态来构建它的图片模型.py. 这意味着,如果您从这个系统外部对架构进行更改,它将不同步;如果您在模型.py创建迁移,当您运行迁移时,您可能会得到一个错误。在

因此,你应该避免这样做。如果已经完成了,您可以在假模式下应用冲突迁移,这只是将其标记为已完成,而无需对数据库实际运行代码。但是首先通过迁移来做任何事情都更简单。在

git对此没有任何影响,只是重申迁移是代码,应该添加到git存储库中。在

相关问题 更多 >