簡體   English   中英

Django 表已經存在

[英]Django Table already exist

這是我的 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')),

嘗試python manage.py migrate your_app --fake 這篇文章談到了它。 Django South-table 已經存在

這個問題已經在這里回答

你應該運行這個:

python manage.py migrate <appname> --fake

python manage.py migrate --fake-initial應該適用於 django 2.2

臨時解決方案可能是評論現有表(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')),
        #    ],
        #),
        ....
        ....

版本:-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

這是數據庫不一致的情況。

您可以執行以下操作:

  1. 注釋掉您上次添加的 model 的代碼。
  2. 運行 makemigrations 然后 migrate --fake,獲取當前情況下的記錄同步。
  3. 現在,取消注釋您最后添加的 model,然后再次運行 makemigrations;

這可能是因為您使用的是 sqlite3 並且sqlite3 中的表名不區分大小寫 嘗試運行此命令並檢查是否創建了兩個表。 根本原因是Tickets表上的ManyToMany字段。

python manage.py sqlmigrate <APP NAME> <MIGRATION ID>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM