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

时间:2017-03-31 21:32:00

标签: mysql django django-models

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

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

然后由于缺少默认值,它会出现THIS之类的错误。试图通过使用THISTHIS的混合物来回滚。然后我尝试使用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的列。我现在有两个问题:

  1. 使用以下方法手动删除表是否安全:

    DROP TABLE blogapp_language; DROP TABLE blogapp_category;

  2. 会有任何负面影响吗?

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

1 个答案:

答案 0 :(得分:0)

  1. 从表格django_migrations中删除相应的条目。
  2. 从您的应用中删除迁移文件夹。
  3. 删除应用创建的表格。
  4. 现在做makemigrations并迁移。

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