Django 4.2.7 数据迁移MySQL版说明

数据迁移就是将已经定义好的数据模型映射到数据库中表的过程。

在Django中使用MySQL数据库,需要修改settings.py配置文件,如下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # django要配置的数据库
        'HOST': IP,  # 数据库的主机地址,我这里是本地mysql主机
        'PORT': 端口,  # 监听端口
        'NAME': 数据库名称,  # 数据库名称【需要提前创建数据库】
        'USER': 用户,  # 数据库用户名【默认是root】
        'PASSWORD': 密码,  # 上面数据库用户的密码
    }
}

使用MySQL数据库,请确认在使用前已经创建了数据库。你可以通过在你的数据库交互式命令行中使用 "CREATE DATABASE database_name;" 命令来完成这件事。

另外,还要确保该数据库用户中提供settings.py 具有 "create database" 权限。

在应用中的models.py中配置自定义的模型,在此我们创建了两个模型,案例如下:

from django.db import models


# Create your models here.

class Question(models.Model):
    question_test = models.CharField(max_length=200)
    pub_date = models.DateTimeField("date published")


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

#每个模型被表示为 django.db.models.Model 类的子类。每个模型有许多类变量,
#它们都表示模型里的一个数据库字段。

#每个字段都是 Field 类的实例 - 比如,字符字段被表示为 CharField ,
#日期时间字段被表示为 DateTimeField 。这将告诉 Django 每个字段要处理的数据类型。

#每个 Field 类实例变量的名字(例如 question_text 或 pub_date )也是字段名,
#所以最好使用对机器友好的格式。你将会在 Python 代码里使用它们,而数据库会将它们作为列名。

#你可以使用可选的选项来为 Field 定义一个人类可读的名字。这个功能在很多 Django 
#内部组成部分中都被使用了,而且作为文档的一部分。如果某个字段没有提供此名称,
#Django 将会使用对机器友好的名称,也就是变量名。在上面的例子中,我们只为 
#Question.pub_date 定义了对人类友好的名字。对于模型内的其它字段,
#它们的机器友好名也会被作为人类友好名使用。

#定义某些 Field 类实例需要参数。例如 CharField 需要一个 max_length 参数。
#这个参数的用处不止于用来定义数据库结构,也用于验证数据,我们稍后将会看到这方面的内容。

#Field 也能够接收多个可选参数;在上面的例子中:我们将 votes 的 default 也就是默认值,
#设为0。

#注意在最后,我们使用 ForeignKey 定义了一个关系。这将告诉 Django,每个 Choice 
#对象都关联到一个 Question 对象。Django 支持所有常用的数据库关系:多对一、多对多和一对一。

为了在我们的工程中包含这个应用,我们需要在配置类settings.py中的INSTALLED_APPS中添加设置

# 模块定义的地方,以django开头的是django框架自带的功能
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'user.apps.UserConfig', # 新增自定义的应用
]

通过运行 makemigrations 命令,Django 会检测你对模型文件的修改(在这种情况下,你已经取得了新的),并且把修改的部分储存为一次 迁移

$ python manage.py makemigrations user
# 执行结果存放在 user/migrations/0001_initial.py 
$ python manage.py sqlmigrate user 0001
# 查看已经生成的SQL建表语句

请注意以下几点:

  • 输出的内容和你使用的数据库有关,上面的输出示例使用的是 MySQL。
  • 数据库的表名是由应用名(user)和模型名的小写形式( question 和 choice)连接而来。
  • 主键(IDs)会被自动创建。
  • 默认的,Django 会在外键字段名后追加字符串 "_id" 。
  • 外键关系由 FOREIGN KEY 生成。你不用关心 DEFERRABLE 部分,它只是告诉 MySQL,请在事务全都执行完之后再创建外键关系。
  • 这个 sqlmigrate 命令并没有真正在你的数据库中的执行迁移 - 相反,它只是把命令输出到屏幕上,让你看看 Django 认为需要执行哪些 SQL 语句。这在你想看看 Django 到底准备做什么,或者当你是数据库管理员,需要写脚本来批量处理数据库时会很有用。

 完成上述步骤,已经在代码中完成模型定义,需要通过如下命令,将模型在数据库中建表,命令如下:

$ python manage.py migrate

 执行完成上述命令之后,在MySQL数据库中就可以看到创建好的数据表。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值