“ 这是Django系列笔记的第二篇,文章内容均为本人通过阅读Django官方文档后整理所得,可用作新手入门指南,或者个人知识点查阅。”
本篇笔记目录索引如下:
-
Django 连接mysql,执行数据库表结构迁移步骤介绍
-
操作数据库,对数据进行简单操作
接下来几篇笔记都会介绍和数据库相关,包括数据库的连接、操作(包括增删改查)、对应的字段类型、model 里Meta 相关参数和 QueryAPI 的详解等。
这一篇先介绍数据库的连接和简单的增删改查操作。
首先介绍一些 Django 的操作表的逻辑,Django 提供了一套非常方便的 orm 方法,可用于Django 能直接对表和数据进行增删改查。
对应的数据库里每一张表都有一个对应的 model 的class,class 下每一个字段都对应 mysql 中表的字段,我们在 Django 中定义好这些内容,然后通过命令迁移到 数据库中来完成修改。
01
—
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 下的每一次更改。
比如上面那条命令,输出的结果如下:
会将转义执行到 数据库的语句打印出来。
02
—
操作数据库,对数据进行简单操作
现在我们根据上述的操作,创建了两张表和对应的 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 对数据进行增删改查的操作。
如果感兴趣,可以长按下方二维码扫描关注后续…
原文始发于微信公众号(Hunter后端):Django笔记二之连接数据库、执行migrate数据结构更改操作
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/178938.html