手动从 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_category
和blogapp_language
。服务器工作正常,但是当我尝试添加这些模型时,我不断收到"Table XXX already exists"
错误。
从 MySQL 中删除表似乎是目前唯一的选择。 当我跑步时
mysql> SHOW COLUMNS FROM blogapp_post;
我没有看到任何对语言或类别的引用,即没有名为 language_id
或 category_id
的列。我现在有两个问题:
手动删除表是否安全:
删除表 blogapp_language; DROP TABLE blogapp_category;
会有什么负面影响吗?
-
有没有办法像 git 这样冻结数据库,这样当我恢复到旧数据库时,django 迁移添加到数据库中的此类表会自动删除??
【问题讨论】:
【参考方案1】:-
从表
django_migrations
中删除相应的条目。
从您的应用中删除迁移文件夹。
删除应用程序创建的表。
现在进行 makemigrations 和迁移。
您可以使用 git 恢复,但会有错误和数据更正要求。
【讨论】:
以上是关于手动从 Django 中的 MySQL 数据库中删除表的主要内容,如果未能解决你的问题,请参考以下文章