我有一个在 MySQL 数据库中运行大量数据的生产 Web 项目。我正在尝试通过对名为“enterlink”的应用程序进行一些更改来更新数据库。我在现有模型中制作了新元素并完全创建了新模型。在此迁移之前,自从最初运行 syncdb 来创建它以来,我从未接触过 db 的架构。当我运行:“python manage.py makemigrations enterlink”时,会出现以下输出(图片)。我的问题是,为什么会这样?数据库已经包含了它在图片中列出的所有模型,那么它为什么要注册这些模型列表呢?当我通过执行“python manage.py migrate”或“python manage.py migrate --fake enterlink”(再次图片)完成迁移时,我得到了显示的输出,但我的数据库架构与旧数据库相同,并且任何新代码都会产生错误。谁能告诉我可能是什么问题?我会非常感谢任何建议。这非常令人沮丧,因为我不确定我错过了什么。
3 回答
您所做的是在运行andpython manage.py syncdb
之前运行了命令。这就是为什么创建数据库模式并且迁移被伪造的原因,因为模式已经存在。我会建议在 Django 1.7 中使用和不使用它。python manage.py makemigrations myapp
python manage.py migrate myapp
syncdb
python manage.py makemigrations myapp
python manage.py migrate myapp
syncdb
如果您更改模型中的任何内容,只需运行makemigrations
并migrate
命令即可。Syncdb 不是必需的。
这个问题和相关答案让我很感兴趣。因此,我想分享我在维护实时数据库和迁移方面的经验。
在django1.5.5中测试
初始化数据库:
./manage.py syncdb --noinput
./manage.py migrate
./manage.py syncdb
现在我已经创建了数据库。
为应用程序进行迁移:
./manage.py schemamigration myapp --initial
./manage.py migrate myapp --fake
- 现在对您的模型进行必要的更改
./manage.py schemamigration myapp --auto
./manage.py migrate myapp
我也是架构迁移的新手,但我将解释它如何为我工作:
首先创建应用程序,然后创建 ./manage.py sycndb,因此创建了表然后你可以 ./manage.py makemigrations myapp --initial 所以现在初始迁移已创建,你应该应用它们 ./manage.py migrate myapp
现在你可以更改您的模型:添加,更改字段,您想要的任何内容,然后 ./manage.py makemigrations myapp --auto 这将为更改创建迁移,现在您需要应用它们
enter code here
./manage.py migrate myapp 所以这实际上会创建数据库中的新表