📅  最后修改于: 2023-12-03 15:00:27.518000             🧑  作者: Mango
Django迁移是一种数据库迁移解决方案,用于在开发过程中更改模型并自动更新数据库。它允许您在保留您的数据的同时,更改您的应用程序的模型。
首先,在 Django settings 中启用迁移
INSTALLED_APPS = [
...
'django.contrib.contenttypes',
'django.contrib.auth',
'myapp',
...
]
MIDDLEWARE = [
...
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
...
]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
其次,创建一个模型。比如说,我们创建一个叫做 Author
的模型:
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
然后,用以下命令新建一个迁移:
python manage.py makemigrations
接着,执行迁移:
python manage.py migrate
这样,新创建的模型就会被迁移到数据库中。
每个迁移都由一个迁移类来表示,该类继承自 django.db.migrations.Migration 类。它包含以下属性:
dependencies = [
('myapp', '0001_initial'),
]
这个属性规定了迁移的依赖关系。
operations = [
migrations.CreateModel(
name='Author',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100)),
('age', models.IntegerField()),
],
),
]
这个属性规定了对数据库操作的列表。
假设您已经从 Author
模型中删除了 age
字段,并将其添加到了新的 Birthday
模型中。
class Birthday(models.Model):
author = models.ForeignKey(Author, on_delete=models.CASCADE)
date = models.DateField()
现在我们需要使用数据库迁移来更新数据库。
首先,更新 Author
模型
class Author(models.Model):
name = models.CharField(max_length=100)
紧接着,我们用以下命令创建一个迁移
python manage.py makemigrations
我们得到了以下迁移:
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('myapp', '0001_initial'),
]
operations = [
migrations.RemoveField(
model_name='author',
name='age',
),
migrations.CreateModel(
name='Birthday',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('date', models.DateField()),
('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='myapp.author')),
],
),
]
最后,执行迁移:
python manage.py migrate
现在,数据库已经被更新,每一个 Author
对象现在都有一个 Birthday
对象与之关联。
Django 迁移是一个很有用的工具,可以让你在开发过程中更改模型并自动更新数据库。迁移类可以帮助我们管理不同版本的迁移,从而确保版本控制的一致性。我们必须经常使用迁移,以确保数据库模型的完整性。