Django 表已经存在
Posted
技术标签:
【中文标题】Django 表已经存在【英文标题】:Django Table already exist 【发布时间】:2016-06-12 19:50:20 【问题描述】:这是我的 Django 迁移文件。 当我跑步时
python manage.py makemigrations/migrate
我收到此错误。
Error:-
django.db.utils.OperationalError: (1050, "Table 'tickets_duration' already exists")
我已删除数据库并运行它,但仍然出现相同的错误。
class Migration(migrations.Migration):
dependencies = [
]
operations = [
migrations.CreateModel(
name='Duration',
fields=[
('Id', models.UUIDField(primary_key=True, db_column=b'duration_id', default=uuid.uuid4, serialize=False, editable=False)),
('duration', models.CharField(max_length=200, db_column=b'duration')),
],
),
migrations.CreateModel(
name='ErrorCount',
fields=[
('Id', models.UUIDField(primary_key=True, db_column=b'error_id', default=uuid.uuid4, serialize=False, editable=False)),
('error', models.CharField(max_length=200, db_column=b'error')),
],
),
migrations.CreateModel(
name='OutageCaused',
fields=[
('Id', models.UUIDField(primary_key=True, db_column=b'error_id', default=uuid.uuid4, serialize=False, editable=False)),
('outage_caused', models.CharField(max_length=200, db_column=b'outage_caused')),
],
),
migrations.CreateModel(
name='Pg',
fields=[
('Id', models.UUIDField(primary_key=True, db_column=b'pg_id', default=uuid.uuid4, serialize=False, editable=False)),
('pg_cd', models.CharField(max_length=200, db_column=b'pg_cd')),
],
),
migrations.CreateModel(
name='SystemCaused',
fields=[
('Id', models.UUIDField(primary_key=True, db_column=b'error_id', default=uuid.uuid4, serialize=False, editable=False)),
('system_caused', models.CharField(max_length=200, db_column=b'system_caused')),
],
),
migrations.CreateModel(
name='Tickets',
fields=[
('ticket_num', models.CharField(max_length=100, serialize=False, primary_key=True, db_column=b'ticket_id')),
('created_dt', models.DateTimeField(db_column=b'created_dt')),
('ticket_type', models.CharField(max_length=20, db_column=b'ticket_type')),
('addt_notes', models.CharField(max_length=1000, db_column=b'addt_notes')),
('row_create_ts', models.DateTimeField(default=datetime.datetime(2016, 2, 29, 16, 58, 31, 584733))),
('row_end_ts', models.DateTimeField(default=b'9999-12-31 00:00:00.00000-00', db_column=b'row_end_ts')),
('duration', models.ManyToManyField(to='tickets.Duration')),
('error_count', models.ManyToManyField(to='tickets.ErrorCount')),
('outage_caused', models.ManyToManyField(to='tickets.OutageCaused')),
【问题讨论】:
只是为了确保:即使您在 empty 数据库上运行manage.py migrate
也会收到此错误?
【参考方案1】:
版本:-Django 3.X
如果上述解决方案不起作用:
python manage.py migrate <appname> --fake
如果它不起作用,请查看迁移文件夹,您会发现您在 models.py 中完成了一些丢失的更改,但不知何故 Django 无法捕获,所以在那里找到它并再次执行对该模型字段进行一些更改(甚至是很小的更改),然后使用,
py manage.py makemigrations app_name
py manage.py migrate app_name
or
py manage.py makemigration <appname> --fake
【讨论】:
【参考方案2】:python manage.py migrate --fake-initial
应该适用于 django 2.2
【讨论】:
【参考方案3】:这个问题已经回答here
你应该运行这个:
python manage.py migrate <appname> --fake
【讨论】:
【参考方案4】:临时解决方案可能是评论现有表的创建(tickets_duration)。
class Migration(migrations.Migration):
dependencies = [
]
operations = [
#migrations.CreateModel(
# name='Duration',
# fields=[
# ('Id', models.UUIDField(primary_key=True, db_column=b'duration_id', default=uuid.uuid4, serialize=False, editable=False)),
# ('duration', models.CharField(max_length=200, db_column=b'duration')),
# ],
#),
....
....
【讨论】:
这个名为 MIgration 的类文件在哪里?【参考方案5】:试试python manage.py migrate your_app --fake
。这篇文章谈到了它。 Django South - table already exists.
【讨论】:
以上是关于Django 表已经存在的主要内容,如果未能解决你的问题,请参考以下文章