Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >python-Django-Django 数据库迁移(二)

python-Django-Django 数据库迁移(二)

原创
作者头像
玖叁叁
发布于 2023-04-23 01:39:15
发布于 2023-04-23 01:39:15
79000
代码可运行
举报
文章被收录于专栏:玖叁叁玖叁叁
运行总次数:0
代码可运行

创建迁移文件

要创建新的迁移文件,我们可以在终端中执行以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python manage.py makemigrations app_name

其中,app_name是我们要创建迁移文件的应用程序的名称。如果我们没有指定app_nameDjango会自动检测出我们最近修改的模型,并为其创建新的迁移文件。

在执行上述命令后,Django会分析应用程序中的所有模型,检测出所有未应用的数据库变更,并将它们记录在新的迁移文件中。这个过程通常会自动完成,无需我们手动干预。

例如,假设我们有一个简单的博客应用程序,其中包含如下的模型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.db import models

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

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    pub_date = models.DateTimeField(auto_now_add=True)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)

上述模型定义了两个模型类:AuthorPostAuthor模型包含两个字段:nameemail,而Post模型包含四个字段:titlecontentpub_dateauthor。其中,author是一个外键字段,指向Author模型。

如果我们现在想要向Post模型中添加一个category字段,我们只需在模型定义中添加这个字段,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.db import models

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

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    pub_date = models.DateTimeField(auto_now_add=True)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    category = models.CharField(max_length=50, null=True, blank=True)

然后,我们可以执行makemigrations命令来创建新的迁移文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python manage.py makemigrations blog

执行上述命令后,Django会在blog/migrations目录下创建一个新的迁移文件,文件名类似于0001_initial.py(如果这是我们的第一个迁移文件)。

在创建迁移文件后,我们可以打开它并查看它的内容。每个迁移文件都包含一个Migration类,该类包含两个属性:dependenciesoperationsdependencies属性列出了当前迁移所依赖的其他迁移文件,而operations属性则列出了当前迁移中的操作。例如,在上面的示例中,新创建的迁移文件大概长这个样子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.db import migrations, models

class Migration(migrations.Migration):

    dependencies = [
        ('blog', '0001_initial'),  # 依赖于前一个迁移文件
    ]

    operations = [
        migrations.AddField(
            model_name='post',
            name='category',
            field=models.CharField(blank=True, max_length=50, null=True),
        ),
    ]

在上述迁移文件中,dependencies属性指定了当前迁移所依赖的其他迁移文件(即,之前的0001_initial迁移文件)。operations属性包含了一个AddField操作,该操作表示我们向Post模型中添加了一个新的category字段。这个操作包含了三个参数:

  1. model_name:指定要修改的模型类的名称(即Post)。
  2. name:指定要添加的字段的名称(即category)。
  3. field:指定要添加的字段的类型和属性(即CharField(blank=True, max_length=50, null=True))。

注意,我们可以在迁移文件中编写多个操作,而不仅仅是一个AddField操作。

在创建迁移文件后,我们可以使用migrate命令来应用该迁移:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python manage.py migrate blog

执行上述命令后,Django将在数据库中创建一个新的blog_post表,并向该表中添加一个category字段。如果我们想要回滚这个迁移,我们可以执行migrate命令,并指定要回滚的迁移文件的名称:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python manage.py migrate blog 0001_initial

执行上述命令后,Django会将数据库恢复0001_initial迁移文件创建的状态,也就是删除blog_post表和category字段。

除了手动创建和应用迁移之外,Django还提供了一些其他有用的命令,以帮助我们管理数据库迁移。以下是一些常用的命令:

  1. showmigrations:显示应用程序中的所有迁移文件和它们的状态。
  2. migrate:应用所有未应用的迁移文件。
  3. makemigrations:生成一个新的迁移文件,该文件包含了所有未应用的数据库变更。
  4. migrate <app_name> <migration_name>:将数据库恢复到指定的迁移状态。
  5. migrate <app_name> zero:将数据库恢复到初始状态(即没有应用任何迁移)。
  6. migrate --fake <app_name> <migration_name>:标记指定的迁移文件已经被应用,但不会实际执行迁移操作。
  7. migrate --fake-initial <app_name>:将所有已经存在的数据库表标记为已经被迁移过,但不会实际执行迁移操作。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Django教程 —— 模型设计
我们一般操作数据库的时候都是通过写sql语句,那么能不能不写sql语句就可以操作数据库呢? 可以利用ORM框架。
忆想不到的晖
2020/11/06
1.1K0
彻底搞懂Django中的数据迁移
Django是基于Python语言的网站开发框架,书中以案例的方式,介绍了Django框架的基本应用。
老齐
2020/06/10
6.4K0
Django——模型Model
对象关系映射(Object Relation Mapping)实现了关系和数据库之间的映射,隐藏了关系数据访问的细节,不需要再编写SQL语句
羊羽shine
2019/05/28
7320
Django(21)migrate报错的解决方案
在讲解如何解决migrate报错原因前,我们先要了解migrate做了什么事情,migrate:将新生成的迁移脚本。映射到数据库中。创建新的表或者修改表的结构。
全栈程序员站长
2022/09/16
6640
Django(21)migrate报错的解决方案
Django中的数据迁移与数据库版本控制:概念、实践与优化策略
在开发Web应用程序时,经常需要对数据库模型进行更改,这可能涉及添加新的表、修改字段或者删除旧的模型。Django提供了一个强大的数据迁移工具,可以帮助开发者管理数据库模式的变更,并且保持数据库与代码的同步。本文将介绍如何在Django中使用数据迁移和数据库版本控制,以及一些常见的最佳实践。
一键难忘
2024/07/08
2770
1.4 Django基础篇--数据库模型设计
新书小广告 《Python爬虫开发与项目实战》基础篇 试读章节链接: http://pan.baidu.com/s/1hrWEOYg 这本书包括基础篇,中级篇和深入篇三个部分,不仅适合零基础的朋友入门,也适合有一定基础的爬虫爱好者进阶,如果你不会分布式爬虫,不会千万级数据的去重,不会怎么突破反爬虫,不会分析js的加密,这本书会给你惊喜。 前言 从上一节我们知道home应用需要涉及文章,分类和标签三个部分,其实这就是个人博客系统最核心的功能:发表文章。下面我们分析一下数据库
七夜安全博客
2018/06/26
1.3K0
Django学习-第十一讲(上):ORM迁移命令
将模型生成迁移脚本。模型所在的app,必须放在settings.py中的INSTALLED_APPS中。这个命令有以下几个常用选项:
小海怪的互联网
2019/10/08
1.2K0
Django学习数据库操作(10)
我们学习 HTML 文件的数据返回,替换其中的内容我们是固定的格式,现在我们学习从数据库的操作,从而能让我们的页面展现更多的内容。
萌海无涯
2019/09/09
6010
Django学习数据库操作(10)
django-模型之(ORM)对象关系映射(一)
所谓对象关系映射,就是将数据库的一些名字与python中的一些名字相对应,表名-->类名,字段-->属性,操作(增删改查)-->方法。这样,我们就可以通过对Python代码的编辑来对数据库进行操作。
西西嘛呦
2020/08/26
5460
Python:Django搭建博客
注册完后,在项目根目录中(即 manage.py 所在的目录)创建 templates 文件夹,使用 pycharm 创建项目会自动帮我们创建
用户8832503
2021/08/20
5710
django 初始化默认数据的一个方法
作者:郭磊 导语: 经常可能会有的一个需求就是,一个表中会有一些默认数据,这些数据未来是可以通过管理端来配置的。所以数据库在被建立之后,会有一些默认数据被插入表中。工程跑起来后,视图函数还未被调用,
serena
2017/08/15
6.3K1
django 初始化默认数据的一个方法
django学习-day06
###2.ORM模型 把行映射成类,把列映射成实例,把字段映射成方法 首先需要在setting中设置datebase数据库信息,然后在新建的app中的models中创建类,继承自models.Model,一定要在installe_apps中添加app,不然不会映射生效
kirin
2020/05/09
3960
Django - 模型层以及如何通过模型层来建表
模型 Django 提供了一个抽象的模型 ("models") 层, 什么是模型层? 这里模型的思想与Java中的ORM(Object Relationship Mapping) 对象关系映射类似 模型准确且唯一的描述了数据 它包含要储存的数据的字段 一般来说,每一个模型都映射一张数据库表 如何创建模型? 每个模型都是一个 Python 的类,这些类继承 django.db.models.Model 模型类的每个属性都相当于一个数据库的字段 利用这些,Django 提供了一个自动生成访问数据库
桑鱼
2020/03/27
8530
Django 学习笔记 1.2 模型和 admin 站点
https://docs.djangoproject.com/zh-hans/2.2/intro/tutorial02/
twowinter
2020/04/17
6540
django2实战2.创建博客应用创建应用文章表的字段设计激活应用开启后台将post模型注册到后台自定义文章显示字段增加可选操作
上篇创建了一个项目,项目相当于站点,应用即是独立的功能模块。比如:淘宝是一个完整的网站,即是一个项目。而淘宝下的聚划算属于一个应用
章鱼喵
2018/09/26
1.1K0
django2实战2.创建博客应用创建应用文章表的字段设计激活应用开启后台将post模型注册到后台自定义文章显示字段增加可选操作
django怎么在迁移数据库的时候,自动生成数据
在这个例子中,我们在create_person函数中创建了一个新的Person实例,并将其保存到数据库中。
SingYi
2023/08/23
2150
探索 Python/Django 支持分布式多租户数据库,如 Postgres+Citus
在 确定分布策略 中,我们讨论了在多租户用例中使用 Citus 所需的与框架无关的数据库更改。在这里,我们专门研究如何借助 django-multitenant 库将多租户 Django 应 用程序迁移到 Citus 存储后端。
为少
2022/05/18
2.1K0
探索 Python/Django 支持分布式多租户数据库,如 Postgres+Citus
django2.0入门教程第二节
继上篇 django2.0入门教程第一节,生成了投票应用,接下来讲解如何使用django的模型与数据库进行交互 数据库设置 打开mysite/settings.py,可看到默认情况下,django使用的是sqlite3数据库 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } 本教
章鱼喵
2018/06/27
7160
为什么使用makemigrations提示No changes detected
我们在使用Django创建工程的时候都使用makemigrations、migrate来生成最初的数据库模型,但是到最后都是直接在数据库中手动创建表,为什么呢?因为这些数据库迁移命令经常会显示No changes detected,明明我们已经改了数据库模型了,为什么提示没有变化呢?这里我们就要搞清楚,数据库迁移命令是怎么去识别模型变化的。详细的源码分析我这里就不做介绍了,说一下它的流程帮助你理解就可以了。
星星在线
2019/10/09
6.4K0
让 Django 完成翻译:迁移数据库
我们已经编写了博客数据库模型的代码,但那还只是 Python 代码而已,Django 还没有把它翻译成数据库语言,因此实际上这些数据库表还没有真正的在数据库中创建。 迁移数据库 为了让 Django 完成翻译,创建好这些数据库表,我们再一次请出我的工程管理助手 manage.py。激活虚拟环境,切换到 manage.py 文件所在的目录下,分别运行 python manage.py makemigrations 和 python manage.py migrate 命令: C:\WINDOWS\system
追梦人物
2018/04/17
1.2K0
推荐阅读
相关推荐
Django教程 —— 模型设计
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验