我第一次尝试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")
这里发生了什么?为什么夹具会阻止我的表被创建,为什么这不起作用?
答案 0 :(得分:0)
如果你DROP DATABASE
,但在你的App / Project中仍然有South Migrations,那么你将会因为数据库更改的历史记录在迁移中而出错。
如果您希望重新加载表,最好的方法是删除数据库迁移(每个应用程序中的South Migration文件夹),然后重新syncdb
并使用{再次执行初始schemamigration
{1}}。
答案 1 :(得分:0)
倾倒整个数据库并使用Django的fixtures实用程序将其重新上传到其他地方是一件非常棘手的事情。 Django的syncdb命令和South的初始迁移已经为你创建了一堆表,因此你必须先删除它们才能继续。在这个具体的例子中,您将需要连接到您的数据库并运行
delete from south_migrationhistory;
祝你好运。