Fixture / South导致我的数据库在删除后不会重新加载

时间:2014-07-30 22:45:23

标签: python django django-south

我第一次尝试Fixtures和South,所以希望这很容易。

我有一个正常运行的数据库,我使用dumpdata命令将其作为json转储。我把它放在我的initial_data.json文件中,设置了fixtures目录,然后继续前进。与此同时,我也建立了我最初的南迁移,但我不确定这是否会产生影响。我决定要测试它,所以我完全删除了我的数据库并运行manage.py syncdb以查看它是否会正确加载。发生这种情况后,我的数据库中的大块表没有被创建,syncdb引发了错误:

> django.db.utils.ProgrammingError: Problem installing fixture
> '/Users/jim/dev/testapp/testing/fixtures/initial_data.json': Could not
> load booker.Position(pk=1): (1146, "Table 'testing.booker_position'
> doesn't exist")

这里发生了什么?为什么夹具会阻止我的表被创建,为什么这不起作用?

2 个答案:

答案 0 :(得分:0)

如果你DROP DATABASE,但在你的App / Project中仍然有South Migrations,那么你将会因为数据库更改的历史记录在迁移中而出错。

如果您希望重新加载表,最好的方法是删除数据库迁移(每个应用程序中的South Migration文件夹),然后重新syncdb并使用{再次执行初始schemamigration {1}}。

答案 1 :(得分:0)

倾倒整个数据库并使用Django的fixtures实用程序将其重新上传到其他地方是一件非常棘手的事情。 Django的syncdb命令和South的初始迁移已经为你创建了一堆表,因此你必须先删除它们才能继续。在这个具体的例子中,您将需要连接到您的数据库并运行

delete from south_migrationhistory;

祝你好运。