【问题标题】:Drop tables in database used by django删除 django 使用的数据库中的表
【发布时间】:2012-10-28 07:54:09
【问题描述】:

问题说明:我想删除数据库中的一些表。

获取错误:外键约束失败

详情:

我有一个预先存在的(不是由 django models.py 填充的)数据库。我正在使用 django。我使用这个数据库来创建 django 站点。在 django 中创建站点时,我已经给出了它的名称和正确的设置。 models.py 中没有创建模型。

执行命令后:

python manage.py syncdb

Django 向该数据库添加了以下表格:

| auth_group |

| auth_group_permissions |

|授权许可 |

|授权用户 |

| auth_user_groups |

| auth_user_user_permissions |

| django_content_type |

| django_session |

| django_site |

我想删除所有这些表。

我试过这个查询;

DROP TABLE 表名;

但是mysql提示错误显示:

ERROR 1217 (23000):无法删除或更新父行:外键约束失败

有没有什么方法可以只删除上面提到的表格来保持我预先存在的表格完好无损?

谢谢。

【问题讨论】:

    标签: mysql django django-models


    【解决方案1】:

    两种可能:

    1. 在另一个模式(mysql 术语中的“数据库”)中有一个表,它有一个 FK 引用
    2. innodb 内部数据字典与 mysql 不同步。

    您可以通过在删除失败后执行“SHOW ENGINE INNODB STATUS”来查看它是哪个表(无论如何是其中一个)。

    如果是后一种情况,如果可以的话,我会转储并恢复整个服务器。

    MySQL 5.1 及更高版本将在错误消息中为您提供带有 FK 的表的名称。

    也试试这个

    请参考这个问题stackoverflow

    禁用外键检查

    DISABLE KEYS
    

    一定要SET FOREIGN_KEY_CHECKS=1;

    【讨论】:

    • 感谢您的回答。我跟着那个问题。
    【解决方案2】:

    您可以轻松配置 django 以使用 MyISAM,而不是使用默认的 innodb 存储引擎。在后一种情况下,它不会因为关系而限制您执行各种操作。两者都有其积极和消极的观点。

    【讨论】:

    • 感谢您的回复。其实我是 django 的新手。我需要阅读有关 MyISAM 的信息。我会读一读。
    • MyISAM 与 django 无关。它是MySql使用的存储引擎
    猜你喜欢
    • 2020-04-18
    • 2020-09-01
    • 2016-09-05
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    相关资源
    最近更新 更多