Django的数据库模型迁移命令makemigrations和migrate是否会导致数据库中的数据丢失?

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

我们知道如果在Django的文件models.py中写好了数据库模型要生成对应的数据库需要执行下面两条命令

python manage.py makemigrations
python manage.py migrate

其中命令 makemigrations 是生成迁移执行文件命令 migrate 是执行迁移命令。

那么如果修改了数据库模型文件models.py的内容比如新增了一张表那么是否会造成原来数据库的数据丢失呢
答运行python manage.py makemigrationspython manage.py migrate命令不会直接导致原有数据丢失。这两个命令是用于在 Django 中管理数据库模型和执行数据库迁移的工具。

makemigrations命令会检测你对模型的更改并生成迁移文件该文件描述了如何在数据库中进行更改以适应新模型。这个命令不会对数据库进行实际更改它只是生成迁移文件。

migrate命令是用来应用数据库迁移的。它会读取迁移文件并根据其中的描述来修改数据库结构以适应新的模型。这个命令会根据迁移文件的内容执行相应的操作包括创建新表、修改现有表结构、添加或删除字段等。

在运行migrate命令之前Django 会检查已应用的迁移记录以确定哪些迁移是未应用的。然后它将按顺序应用那些尚未应用的迁移文件确保数据库与最新的模型定义一致。

除非你在模型定义中有删除表或字段的操作否则运行这两个命令不会导致数据丢失。Django 会尽可能地保留现有数据并根据迁移文件进行相应的结构修改。

不过作为一种良好的开发实践在运行任何可能会影响数据库结构的迁移命令之前强烈建议备份数据库以防万一。这样可以在出现问题时恢复到先前的状态。

下面以一个实际例子来说明
当前数据库中已经存在了表app1_user并且已经存在了数据如下面的截图所示
在这里插入图片描述
现在我们对数据库模型文件"E:\Python_project\P_001\myshop-test\myshop\app1\models.py"进行修改增加表app1_author和表app1_post更新后的 models.py 的内容如下

from django.db import models

# Create your models here.


class User(models.Model):
    username = models.CharField(max_length=50)
    email = models.EmailField(unique=True)
    # 其他字段...

    def __str__(self):
        return self.username


class Author(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name


class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    author = models.ForeignKey(Author, on_delete=models.CASCADE)

    def __str__(self):
        return self.title

接下来运行下面的命令

CD E:\Python_project\P_001\myshop-test\myshop
E:
python manage.py makemigrations
python manage.py migrate

在这里插入图片描述
从上面的截图中可以看出makemigrations 命令分析出了这次的更新是增加 model Author 和 model Post此时我们再看数据库如下
在这里插入图片描述
从上图我们可以看出成功的增加了表app1_author和表app1_post原来的表app1_user及其数据仍然都在。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: go数据库