共计 3556 个字符,预计需要花费 9 分钟才能阅读完成。
本篇笔记目录索引如下:
- Django 连贯 mysql,执行数据库表构造迁徙步骤介绍
- 操作数据库,对数据进行简略操作
接下来几篇笔记都会介绍和数据库相干,包含数据库的连贯、操作(包含增删改查)、对应的字段类型、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 数据结构更改操作
如果想获取更多相干文章,可扫码关注浏览: