【发布时间】:2020-07-22 11:00:52
【问题描述】:
我正在将一个项目从 Django 1.1 迁移到 Django 3.0 我已完成该项目。当我在新转换的项目中将生产转储转储到本地时,我得到"Table already exists"。
这就是我正在做的事情。
mysql> create database xyx;
docker exec -i <container-hash> mysql -u<user> -p<password> xyx < dbdump.sql
然后我运行迁移,因为我必须对之前给定的模型进行一些更改。
./manage.py migrate --fake-initial
这是我得到的输出
_mysql.connection.query(self, query)
django.db.utils.OperationalError: (1050, "Table 'city' already exists")
那么,该怎么办?
【问题讨论】:
-
可能不是在初始迁移时创建了一个或多个表?
--fake-initial仅当迁移文件在迁移类中具有 initial=True 时才会考虑。 -
当我阅读文档时,我完全不明白那行是什么意思。那么你有解决这个特殊问题的方法吗?
-
查看您的迁移 - 第一个迁移确实将属性
initial设置为True。这将被跳过,但如果您有下一个迁移创建City没有此属性的模型 - Django 将不会跳过它并引发错误。我认为您最终的解决方案是通过从所有非初始表中删除表创建来手动更改迁移。