关于后端:Django笔记二之连接数据库执行migrate数据结构更改操作

56次阅读

共计 3556 个字符,预计需要花费 9 分钟才能阅读完成。

本篇笔记目录索引如下:

  1. Django 连贯 mysql,执行数据库表构造迁徙步骤介绍
  2. 操作数据库,对数据进行简略操作

接下来几篇笔记都会介绍和数据库相干,包含数据库的连贯、操作(包含增删改查)、对应的字段类型、model 里 Meta 相干参数和 QueryAPI 的详解等。

这一篇先介绍数据库的连贯和简略的增删改查操作。

首先介绍一些 Django 的操作表的逻辑,Django 提供了一套十分不便的 orm 办法,可用于 Django 能间接对表和数据进行增删改查,对应的数据库里每一张表都有一个对应的 model 的 class,class 下每一个字段都对应 mysql 中表的字段,咱们在 Django 中定义好这些内容,而后通过命令迁徙到 数据库中来实现批改。

1、Django 连贯 mysql

前一篇笔记咱们创立了 一个 名为 polls 的 application,接下来咱们要在 polls 上面建设和数据库的连贯。

连贯上 mysql 分为以下几步:

  • 装置依赖
  • 创立数据库
  • 批改 settings.py 填写数据库信息
  • 迁徙默认表
  • 定义 model 信息
  • 生成 migrations 文件
  • 执行表的迁徙

装置依赖

Django 和 mysql 连贯须要装置一个 driver,咱们这里抉择 mysqlclient,以下是装置命令:

pip3 install mysqlclient -i https://mirrors.aliyun.com/pypi/simple/

还是通过 -i 指定源,减速装置。

创立数据库

能够本人在服务器或者本地装置一个能够运行的 mysql,我这里装置的是 mysql 5.7 版本。

创立数据库的时候记得指定编码为 utf-8:

create database func_test default character set='utf8'

在这里,数据库名称为 func_test,库编码为 utf-8。

批改 settings.py 填写数据库信息

在 hunter/settings.py 文件下,有一个 DATABASES 的变量,将其批改为以下内容:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'func_test',
        "USER": "user",
        "PASSWORD": "password",
        "HOST": "xx.xx.xx.xx",
        "PORT": 3306,
    }
}

其中,default 示意零碎默认连贯的数据库,一个 Django 零碎能够连贯多个数据库,能够通过这个中央定义变量名称来指定。
如果须要连贯多个数据库,后续的操作能够再介绍。在应用的时候通过 using() 来辨别
ENGINE:在这里值为 django.db.backends.mysql,示意连贯的数据库类型是 mysql
NAME:示意连贯的数据库名称,在这里咱们指定的是 func_test
USER:连贯数据库应用的用户名
PASSWORD:连贯数据库用户名对应的明码
HOST:你的数据库的地址,本地的话是 localhost 或者 127.0.0.1,服务器上填写相应的 ip 即可
PORT:端口,mysql 默认是 3306

以上的那些变量,记得更换老本地的变量。

好了,对于数据库的根本连贯配置就都设置实现了。

迁徙默认表

Django 零碎里是有一些默认的配置表的,
比方用户表,如果应用 Django 的默认用户零碎的话能够用上
django_session 表,用于记录用户的登录的 session 相干记录
django_migrations 表,记录每一次表及字段的创立和批改操作等等

这些表,在咱们执行以下操作命令的时候,会主动写入数据库:

python3 manage.py migrate

定义 model 信息

在上一篇笔记里咱们创立了一个名为 polls 的 application,外面有一个 models.py 的文件,而后咱们编辑该文件,内容如下:

from django.db import models

class Question(models.Model):
    question_text = 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)

在上述文件里,每一个 class 代表着一张表,每一行都代表着 表里的一个字段,字段的类型在上述的文件里对应数据库的类型为:
CharField:varchar
DateTimeField:datetime
IntegerField:int
ForeignKey:外键
这个类型咱们后续会再介绍,这里只做一个简略的介绍。

而后咱们还须要将咱们这个 model 注册到咱们的 settings.py 里的 INSTALLED_APPS:

INSTALLED_APPS = [
    'polls.apps.PollsConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

生成 migrations 文件

咱们定义好 model 文件之后,在生成表构造之前,咱们还须要生成一个 记录表构造变动的文件,也就是咱们的 migrations 文件,每一次批改都能够生成一个新的 migration 文件,而后写入数据库,该文件寄存在 每一个 application 的 migrations 文件夹上面。
生成 migrations 文件命令:

python3 manage.py makemigrations polls

而后咱们能够看到在 polls/migrations/ 文件夹下多了一个 0001_initial.py

执行表的迁徙

而后执行上面的命令,Django 会依据零碎里上一次在 django_migrations 表里记录的上一次执行的中央,检测咱们零碎里新增的 migrations 文件,主动将数据结构的更改适配到数据库里:

python3 manage.py migrate polls

如果对 model.py 再进行一次更改,而后执行 makemigrations 命令,migrations 文件夹下会主动新增新的迁徙命令。
每一个新增的后面都会有序号标识,比方咱们最开始的是 0001,之后每一次都会依照序号往后新增。
有趣味的能够看看 migrations 里的文件内容,那是 python 语言里对应 SQL 的更改内容,这里不做开展,有趣味的能够看看。

如果咱们想在每一次执行 migrate 前,查看会对数据库进行怎么样的更改,能够依据 咱们下面说的 序号,来指定 migration 文件查看:

python3 manage.py sqlmigrate polls 0001

python3 manage.py sqlmigrate 是固定语法,
polls 是对应的 application 的名称,
0001 是每一次 migration 的后面的序号,这样就能够指定到 application 下的每一次更改。

比方下面那条命令,输入的后果如下:

会将本义执行到 数据库的语句打印进去。

2、操作数据库,对数据进行简略操作

当初咱们根据上述的操作,创立了两张表和对应的 model,接下来介绍怎么对数据进行操作:

比方咱们要创立一个 Question 数据,应用 Django 的语法来创立,能够通过 以下命令进入 Django 的交互界面:

python3 manage.py shell

而后挨个输出:

from polls.models import Question
q = Question(question_text="quesiton_text_1", pub_date="2022-01-01 00:00:00")
q.save()

而后查看数据库,能够看到咱们通过 save() 操作曾经创立了一条数据了。

获取单个数据呢:

q = Question.objects.get(id=1)
print(q.question_text)

以上就是咱们这一篇笔记的全部内容,下一篇笔记将具体介绍如果通过 Django 的 model 对数据进行增删改查的操作。

本文首发于自己微信公众号:Django 笔记。
原文链接:Django 笔记二之连贯数据库、执行 migrate 数据结构更改操作
如果想获取更多相干文章,可扫码关注浏览:

正文完
 0