我得到了类似django.db.utils.OperationalError: (1050, "Table 'someTable' already exists")
的错误,我想知道得到这种类型错误的原因。我在终端上运行了以下命令
1. python manage.py makemigration app
2. python manage.py migrate app
当运行migrate时,得到上面的错误。我通过运行
python manage.py migrate --fake app
但是我想知道为什么我会得到这个错误,以及--fake app
如何解决我的问题。谢谢
3条答案
按热度按时间yuvru6vn1#
表'someTable'已存在于数据库中-可能是因为它是由以前对
./manage.py syncdb
的调用创建的,也可能是您手动创建的(或者你之前用的是South,现在切换到Django〉= 1.7)--显然你没有任何现有的Django(非南)迁移,所以makemigration
认为必须创建表(正确的是,一旦有人从头开始安装您的应用程序,情况确实如此)。使用
--fake
标记告诉migrate
命令只记录已应用的迁移,而不有效地应用它,这就是此标记的全部意义:当您的应用程序已经安装(数据库表等)而没有迁移,您想开始使用迁移。shstlldc2#
这个问题意味着
someTable
是在没有Django迁移的情况下创建的,或者django_migrations
中关于迁移的记录被删除了。--fake
在django_migrations
中添加了关于迁移的记录,而没有应用实际的迁移。django_migrations
中的记录包含有关迁移的信息:应用程序标签、迁移名称和应用迁移的日期。11dmarpk3#
我也遇到了同样的问题。我用的是MySQL数据库。
使用SQLite时,您需要删除SQLite.db
我所做的一切,当使用MySQL作为数据库来处理这是...
1.进行迁移
python manage.py makemigrations
1.从mysql shell中删除数据库
mysql> drop database [database name];
1.从mysql shell
mysql> create database [database name];
创建数据库1.使用
python manage.py migrate --run-syncdb
命令迁移