我有一个生产网络项目,在MySQL数据库中运行了大量数据。我正在尝试通过对名为" enterlink的应用程序的一些更改来更新数据库。"我在现有模型中创造了新元素并完全创建了新模型。在此迁移之前,我从未触及数据库的模式,因为最初运行syncdb来创建它。当我运行:" python manage.py makemigrations enterlink"出现以下输出(pic)。我的问题是,为什么会发生这种情况?数据库已经包含了它在图片中列出的所有模型,那么为什么要注册这些模型列表呢?当我通过执行" python manage.py migrate"来完成迁移时或" python manage.py migrate --fake enterlink" (pic再次),我得到一个输出,但我的数据库模式仍然与旧数据库相同,任何新代码都会产生错误。谁能告诉我这可能是什么问题?我真的很感激任何建议。由于我不确定自己错过了什么,所以非常令人沮丧。
答案 0 :(得分:4)
您所做的就是在运行python manage.py syncdb
和python manage.py makemigrations myapp
之前运行了python manage.py migrate myapp
命令。这就是syncdb
创建数据库模式并且迁移伪造的原因,因为模式已经存在。我建议使用python manage.py makemigrations myapp
和python manage.py migrate myapp
,而不要在Django 1.7中使用syncdb
弃用。
如果您更改模型中的任何内容,只需运行makemigrations
和migrate
命令即可。不需要Syncdb。
答案 1 :(得分:2)
这个问题和相关的答案让我很感兴趣。因此,我想分享我在维护实时数据库和迁移方面的经验。
在django1.5.5中测试
def choice():
userChoice = str(raw_input("Enter your choice. E or D: ")
if userChoice == "e" or "d":
return userChoice
else:
print("Invalid Choice. Please try again.")
choice()
./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
答案 2 :(得分:1)
我也是schemamigration的新手,但我会解释它对我有用:
首先您创建应用然后
./manage.py sycndb,因此可以创建表
./manage.py makemigrations myapp --initial
所以现在创建了初始迁移,您应该应用它们
./manage.py迁移myapp
现在您可以更改模型:添加,更改字段,您想要的任何内容然后
./manage.py makemigrations myapp --auto
这将创建更改的迁移,现在您需要应用它们
enter code here
./ manage.py迁移myapp
所以这实际上会在db