如何重置Django的数据库?

作者: siediyer 分类: django,python 发布时间: 2024-02-01 20:44

作为构建web应用程序最常用的框架之一,Django为我们提供了强大的工具,使我们的开发更容易、更快。SQLite3数据库是Django web应用程序开发的标准工具之一。本文将向您展示如何重置给定的数据库。

为什么要在Django中重置数据库?

在早期开发阶段,当数据库中没有实际数据时,可能会发生许多数据库更改。通常,重置数据库比编写自定义迁移文件更容易。

首先,我们的SQLite3数据库是通过settings.py中的给定参数创建的。默认值:

DATABASES = {
     'default': {
         'ENGINE': 'django.db.backends.sqlite3',
         'NAME': BASE_DIR / 'db.sqlite3',
     }
}

当我们执行python manage.py migrate时,db.sqlite3数据库将在本地创建。

考虑到这一点,我将向你展示几种在Django中重置数据库的方法:

  • 手动复位
  • 使用Django命令

在Django中手动重置数据库

手动重置数据库需要了解项目结构及其文件的基本知识。

SQLite3数据库要求:

  • 迁移(migrations)文件
  • db.sqlite3 文件

在Django中重置数据库包括4个步骤:

  • 删除所有迁移文件
  • 删除db.sqlite3 文件
  • 创建新的迁移文件 – python manage.py makemigrations
  • 迁移更改 – python manage.py migrate

当然,您可以使用.sh脚本来自动化给定的步骤。

在下面的示例中,我们有一个包含两个应用程序的项目,authapp和bookapp。该脚本将上述步骤自动化

rm authapp/migrations/00*.py
rm bookapp/migrations/00*.py
rm db.sqlite3

python3 manage.py makemigrations authapp
python3 manage.py makemigrations bookapp
python3 manage.py migrate

首先,我们从两个应用程序中删除所有迁移文件,然后删除db。数据库sqlite3。如果有新的更改,我们运行makemigration,然后迁移更改,创建一个新的数据库。数据库sqlite3。

警告-删除迁移文件是不好的做法。但是,进行新的迁移和迁移更改仍然是比重置数据库更好的选择。

在Django中使用命令重置数据库

冲洗方法

另一个完全相同的选项是python manage.py flush

>>>python manage.py flush

You have requested a flush of the database.
This will IRREVERSIBLY DESTROY all data currently in the "db.sqlite3" database,
and return each table to an empty state.
Are you sure you want to do this?

Type 'yes' to continue, or 'no' to cancel: yes

python manage.py flush删除数据库中所有表中的所有数据。重要的是要知道,flush不会将新的更改迁移到数据库;它只删除所有数据。因此,如果您更改了模型,您仍然需要进行迁移,然后将它们迁移到数据库。

移零法

python manage.py migrate <app_name> zero方法更具体地连接到Django应用程序。它可以还原Django中与特定应用程序相关的所有迁移。

这对我们重置数据库有什么帮助?

与新迁移相配合,它从给定的应用程序中重建模型,因此,我们得到了没有旧数据的新表。

例如,如果我们想重置<example_app>中的所有数据,我们需要采取以下步骤:

python manage.py migrate example_app zero
python manage.py migrate example_app

重置Django中的非本地数据库

数据库有各种类型和形式,因此制定一种通用的方法来重置它们通常是具有挑战性的。flush和migrate zero方法都可以工作。不过,在最坏的情况下,您始终可以删除数据库并将更改迁移到新数据库。

如果数据库中包含敏感数据,请考虑使用dumpdata和/或数据库备份

另外,你可以随时查看Django官方文档。

总结

在开发的早期阶段,当数据并不重要时,我总是发现处理数据库更改是一件具有挑战性和令人厌烦的事情。早期阶段包括客户机需求的许多更改,因此也包括许多数据库更改。这就是为什么我选择写这篇文章并分享我的经验(和脚本)来帮助您克服这些障碍。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

Title - Artist
0:00