python 为什么会出现这个错误“django.db.utils.OperationalError:(1050,“表'someTable'已存在”)”

v2g6jxz6  于 2023-01-24  发布在  Python
关注(0)|答案(3)|浏览(551)

我得到了类似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如何解决我的问题。谢谢

yuvru6vn

yuvru6vn1#

表'someTable'已存在于数据库中-可能是因为它是由以前对./manage.py syncdb的调用创建的,也可能是您手动创建的(或者你之前用的是South,现在切换到Django〉= 1.7)--显然你没有任何现有的Django(非南)迁移,所以makemigration认为必须创建表(正确的是,一旦有人从头开始安装您的应用程序,情况确实如此)。
使用--fake标记告诉migrate命令只记录已应用的迁移,而不有效地应用它,这就是此标记的全部意义:当您的应用程序已经安装(数据库表等)而没有迁移,您想开始使用迁移。

shstlldc

shstlldc2#

这个问题意味着someTable是在没有Django迁移的情况下创建的,或者django_migrations中关于迁移的记录被删除了。--fakedjango_migrations中添加了关于迁移的记录,而没有应用实际的迁移。
django_migrations中的记录包含有关迁移的信息:应用程序标签、迁移名称和应用迁移的日期。

11dmarpk

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命令迁移

相关问题