【问题标题】:django.db.utils.InternalError: (1050, "Table 'django_content_type' already exists")django.db.utils.InternalError: (1050, "表 'django_content_type' 已经存在")
【发布时间】:2020-05-16 20:22:22
【问题描述】:

django.db.utils.InternalError: (1050, "表 'django_content_type' 已经存在")

我刚刚从朋友那里复制了一个项目,当我运行 makemirations 时,它运行正常。但是对于——

python3 manage.py migrate 

它给出了这个错误 -

Operations to perform:
  Apply all migrations: admin, auth, balancesheet, contenttypes, dynapp, pandl2, sessions, trialbal2
Running migrations:
  Applying contenttypes.0001_initial...Traceback (most recent call last):
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/django/db/backends/utils.py", line 82, in _execute
    return self.cursor.execute(sql)
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 74, in execute
    return self.cursor.execute(query, args)
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/pymysql/cursors.py", line 170, in execute
    result = self._query(query)
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/pymysql/cursors.py", line 328, in _query
    conn.query(q)
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/pymysql/connections.py", line 517, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/pymysql/connections.py", line 732, in _read_query_result
    result.read()
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/pymysql/connections.py", line 1075, in read
    first_packet = self.connection._read_packet()
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/pymysql/connections.py", line 684, in _read_packet
    packet.check_error()
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/pymysql/protocol.py", line 220, in check_error
    err.raise_mysql_exception(self._data)
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/pymysql/err.py", line 109, in raise_mysql_exception
    raise errorclass(errno, errval)
pymysql.err.InternalError: (1050, "Table 'django_content_type' already exists")

上述异常是以下异常的直接原因:

Traceback (most recent call last):
  File "manage.py", line 21, in <module>
    main()
  File "manage.py", line 17, in main
    execute_from_command_line(sys.argv)
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/django/core/management/base.py", line 323, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/django/core/management/base.py", line 364, in execute
    output = self.handle(*args, **options)
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/django/core/management/base.py", line 83, in wrapped
    res = handle_func(*args, **kwargs)
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 234, in handle
    fake_initial=fake_initial,
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/django/db/migrations/executor.py", line 117, in migrate
    state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/django/db/migrations/executor.py", line 147, in _migrate_all_forwards
    state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/django/db/migrations/executor.py", line 245, in apply_migration
    state = migration.apply(state, schema_editor)
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/django/db/migrations/migration.py", line 124, in apply
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/django/db/migrations/operations/models.py", line 92, in database_forwards
    schema_editor.create_model(model)
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/django/db/backends/base/schema.py", line 307, in create_model
    self.execute(sql, params or None)
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/django/db/backends/base/schema.py", line 137, in execute
    cursor.execute(sql, params)
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/django/db/backends/utils.py", line 99, in execute
    return super().execute(sql, params)
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/django/db/backends/utils.py", line 67, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/django/db/backends/utils.py", line 76, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/django/db/utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/django/db/backends/utils.py", line 82, in _execute
    return self.cursor.execute(sql)
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 74, in execute
    return self.cursor.execute(query, args)
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/pymysql/cursors.py", line 170, in execute
    result = self._query(query)
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/pymysql/cursors.py", line 328, in _query
    conn.query(q)
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/pymysql/connections.py", line 517, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/pymysql/connections.py", line 732, in _read_query_result
    result.read()
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/pymysql/connections.py", line 1075, in read
    first_packet = self.connection._read_packet()
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/pymysql/connections.py", line 684, in _read_packet
    packet.check_error()
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/pymysql/protocol.py", line 220, in check_error
    err.raise_mysql_exception(self._data)
  File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/pymysql/err.py", line 109, in raise_mysql_exception
    raise errorclass(errno, errval)
django.db.utils.InternalError: (1050, "Table 'django_content_type' already exists")


 django.db.utils.InternalError: (1050, "Table 'django_content_type' already exists")

当我打开 MySQL 以使用 drop table 命令删除 'DJANGO_CONTENT_TYPE 表时,它给出了这个错误 -

mysql> drop table django_content_type;
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails

即我不能删除这个表。

我进行了迁移,因为我对模型进行了一些更改。

虽然我找到了一个替代方法来绕过这个错误,而不是通过逻辑。我创建了一个 nee 数据库并将设置更改为新数据库。在这里,我将内容从初始数据库复制到另一个。

【问题讨论】:

  • 我认为这里已经提到了一个写得很好的答案:stackoverflow.com/a/23293136/9279181
  • @Gaurav Gupta 尝试SET FOREIGN_KEY_CHECKS = 0 然后删除表
  • @ZarakiKenpachi 我应该在哪里设置 SET FOREIGN_KEY_CHECKS = 0?
  • @GauravGupta 在 mysql shell 中,然后删除表
  • 不要删除内容类型表 - 它会破坏当前指向它的任何数据。如果您从其他地方复制数据库,则必须复制迁移文件和迁移数据库表以保持一切同步。

标签: python django python-3.x django-rest-framework


【解决方案1】:

对于 django3: 我收到此错误: django.db.utils.OperationalError: (1054, "'django_content_type' 中的未知列 'name'")

  1. 删除 myapp/migrations/0001_initial.py 和 0002_ .....

  2. 从 django_migrations 表中删除所有行。

    Delete * from django_migrations
    
  3. python3 manage.py makemigrations

python manage.py makemigrations
  1. python3 manage.py migrate --fake-initial

python manage.py migrate --fake-initial
  1. 我收到此错误: MySQLdb._exceptions.OperationalError: (1054, "'django_content_type' 中的未知列 'name'")

  2. 我在 django_content_type 表中添加一列。

    alter table django_content_type 添加名称 varchar(255)

  3. python3 manage.py migrate --fake-initial

  4. 出现这个错误django.db.utils.OperationalError: (1061, "Duplicate key name 'django_site_domain_a2e37b91_uniq'")

  5. 我没有对此错误采取任何措施,但我的网站运行良好。 'name' 列将删除

【讨论】:

    【解决方案2】:

    我的问题通过首先从我的应用程序中删除数据库、迁移和 pycache,最后删除我的 virtualenv 并创建一个新的来解决。

    【讨论】:

      猜你喜欢
      • 2018-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-08
      • 2015-09-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-09
      相关资源
      最近更新 更多