手动从 Django 中的 MySQL 数据库中删除表

Posted

技术标签:

【中文标题】手动从 Django 中的 MySQL 数据库中删除表【英文标题】:Deleting a table from MySQL database in Django manually 【发布时间】:2017-08-26 06:34:51 【问题描述】:

在我在 Django 中使用我的博客应用程序 (blogapp) 进行实验期间,我创建了两个模型(类别和语言),并使用以下连接将它们连接到另一个模型 (Post):

category = models.ManyToManyField(Category)
language = models.ForeignKey(Language)

然后由于缺少默认值,它给出了类似THIS 的错误。尝试使用THIS 和THIS 的混合物来回滚。然后我尝试使用THIS 添加默认值。我有一个错误"django.db.utils.OperationalError 1050, Table XXX already exists",然后我尝试了THIS。尝试通过手动从迁移文件夹中删除创建的迁移来恢复迁移。在某些时候,我得到了 django (1054, "Unknown column in 'field list") 错误。

最后我决定回到我原来的起点。当我使用python manage.py dbshell 连接到我的 mysql 数据库时,我意识到我的 MySQL 服务器仍然有两个应该删除的表,blogapp_categoryblogapp_language。服务器工作正常,但是当我尝试添加这些模型时,我不断收到"Table XXX already exists" 错误。

从 MySQL 中删除表似乎是目前唯一的选择。 当我跑步时

mysql> SHOW COLUMNS FROM blogapp_post;

我没有看到任何对语言或类别的引用,即没有名为 language_idcategory_id 的列。我现在有两个问题:

    手动删除表是否安全:

    删除表 blogapp_language; DROP TABLE blogapp_category;

会有什么负面影响吗?

    有没有办法像 git 这样冻结数据库,这样当我恢复到旧数据库时,django 迁移添加到数据库中的此类表会自动删除??

【问题讨论】:

【参考方案1】:
    从表django_migrations中删除相应的条目。 从您的应用中删除迁移文件夹。 删除应用程序创建的表。

现在进行 makemigrations 和迁移。

您可以使用 git 恢复,但会有错误和数据更正要求。

【讨论】:

以上是关于手动从 Django 中的 MySQL 数据库中删除表的主要内容,如果未能解决你的问题,请参考以下文章

Django 中的模型表被删除

Django:从服务器上的现有文件手动创建模型中的图像字段

如何从 Django 中的 sql 模式生成数据模型?

Django 1.10 从 CSV 文件记录手动提交到数据库

Django 从 MySQL 迁移到 Postgres

django mysql连接