【问题标题】:How to drop a table (sqlite3) in Django==2.1?如何在 Django==2.1 中删除表(sqlite3)?
【发布时间】:2019-06-12 20:18:21
【问题描述】:

我在我的应用程序events 中创建了以下模型:

from django.db import models
from django.utils import timezone
from django.urls import reverse


class EventType(models.Model):
    type_of_event = models.CharField(max_length=100, unique=True)

    def __str__(self):
        return self.type_of_event


class Event(models.Model):
    type_of_event = models.ForeignKey(EventType, on_delete=models.CASCADE)
    name = models.CharField(max_length=100)
    description = models.TextField()
    event_date = models.DateTimeField(default=timezone.now())
    venue = models.CharField(max_length=200)
    entry_fee = models.FloatField()

    def __str__(self):
        return self.name

由于一些错误和更改,我多次创建和删除迁移文件。现在,makemigrations 命令可以工作,但是当我尝试使用 python manage.py migrate 迁移模型时,它显示以下错误:

  File "/home/anirudh/.local/share/virtualenvs/Amrita-event-manager-DHqKHtGE/lib/python3.5/site-packages/django/db/backends/sqlite3/base.py", line 294, in execute
    return Database.Cursor.execute(self, query)
django.db.utils.OperationalError: table "events_event" already exists

我正在使用 django 2.1 版和 sqlite3。

与此类似的大多数问题都太老了,与我现在使用的版本不兼容。

【问题讨论】:

  • 删除数据库文件。 SQLite 创建一个包含(整个)数据库的文件,因此通过删除它,您“删除”了数据库。
  • @WillemVanOnsem 你的意思是 db.sqlite3 文件吗?但是如果我删除这个,会不会影响我在其他应用中的其他模型?
  • 是的,您将删除所有数据(在所有应用程序中),除非您进行了一些高级路由。但是现在,您可能会使您的数据库处于不一致的状态(其中列出了一些迁移,或者部分应用了迁移)。您也可以打开 sqlite shell,并删除events_event 表。
  • @WillemVanOnsem 你能建议我删除events_event 表的方法吗?我不想影响我的其他模型。我在 StackOverflow 上搜索了一种方法,但大多数解决方案都太旧了。

标签: django django-models sqlite


【解决方案1】:

首先,备份db.sqlite3文件

您可以使用 dbshel​​l,它为数据库引擎运行命令行客户端

https://docs.djangoproject.com/en/dev/ref/django-admin/#django-admin-dbshell

python manage.py dbshell

列出所有表格

sqlite> .table

删除表格

sqlite> DROP TABLE <table>;

【讨论】:

  • 工作就像一个魅力;)
猜你喜欢
  • 2011-01-18
  • 2020-08-31
  • 2021-08-18
  • 1970-01-01
  • 2017-06-28
  • 2018-11-09
  • 2020-12-15
  • 2016-03-09
  • 1970-01-01
相关资源
最近更新 更多