hualinux dj3 1.2:连接mysql8.0数据库

本教程详细讲解了如何在Django项目中配置并使用MySQL数据库,包括安装mysqlclient驱动,修改settings.py配置,使用makemigrations和migrate命令生成数据库表,以及填充数据并进行简单查询。此外,还展示了如何将查询结果序列化为JSON格式并返回HTTP响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、环境说明

二、django安装mysql驱动及配置

2.1 配置mysql数据库

2.2 添加mysql驱动

2.2.1 驱动说明

2.2.2 安装mysqlclient

三、使用命令生成相关mysql表

3.1 创建模型model

3.2 使用makemigrations命令生成迁移文件

3.3 使用migrate迁移命令生成相关的表

3.3.1 创建django数据库

3.3.2 使用migrate命令生成相关的表

四、测试效果

4.1 为stu表填写数据

4.2 做一个简单的查询

4.2.1 django的查询知识

4.2.2 序列化转成json格式

4.2.3 视图中添加查询代码

4.2.4 配置url路由

4.3 效果


前篇讲了如果使用pycharm创建django项目并输出helloWorld,本篇开始讲如何连接数据库,这里主要是以mysql8.0为主。

主要知识:

 入教程的《第 2 节:模型和管理站点

专题指南 中的《执行查询

专题指南 中的《序列化 Django 对象》:主要是把python数据类型转为可网络传输的json格式

一、环境说明

我使用的是win7 64位

软件名

版本

说明

phpStudy

8.1

用它安装mysql8.0,可以看安装教程

Webyog SQLyog

13.0

mysql连接工具,可以连接mysql教程

python

3.8.9

django所依赖的环境,是基于python的web框架

PyCharm

2021.1

django ide开发工具

mysqlclient

2.0.3

django中mysql客户端模块,在pycharm中添加

phpStudy如果安装mysql8.0和启动,在说明后面已经给出连接,不懂的可以去看一下。

这个项目也是在前篇所建立helloWold项目的基础上进行的。

二、django安装mysql驱动及配置

2.1 配置mysql数据库

django默认数据库为SQLite,我们需要把它修改为mysql,所以需要修改一下配置。

打开mydjango/settings.py,找到

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

修改为

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django',
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'TIME_ZON': 'Asia/Shanghai'
    }
}

PS:我这里使用的是root,因为phpStudy中mysql默认登录用户名和密码都是root ,如果使用其它可以修改一下。

注:mysql8.0之前的版本,密码加密方式是:mysql_native_password, mysql8和php7.2.4之后默认密码加密方式是caching_sha2_password

在phpStudy中把root修改为mysql_native_password 加密方式了。

2.2 添加mysql驱动

2.2.1 驱动说明

django默认没有安装mysql驱动,所以要安装一下。官方原文如下:

如果你正在使用 MySQL MariaDB,则需要一个像 mysqlclient 一样的 DB API 驱动 详细信息参见 MySQL 后端注意事项

 

MySQL 数据库 API 驱动程序

MySQL 有几个驱动程序实现了 PEP 249 中描述的 Python 数据库 API

  • mysqlclient 是一个原生驱动。它是 推荐的选择
  • MySQL Connector/Python 是一个来自 Oracle 的纯 Python 驱动,不需要 MySQL 客户端库或标准库之外的任何 Python 模块。

这些驱动程序都是线程安全的,并提供连接池

我这里选择官方推荐的mysqlclient安装

2.2.2 安装mysqlclient

我这里直接使用pycharm安装mysqlclient了,操作如下:

如果安装成功会提示安装成功,如下图所示:

再关闭此窗口发现多了一个mysqlclient,如下图所示:

三、使用命令生成相关mysql表

3.1 创建模型model

我打算创建如下形式的学生表,如下所示:

这些表是django用相对命令生成的,在生成表之前,需要创建一个model模型,model配置models.py代码如下:

from django.db import models

# Create your models here.
class Stu(models.Model):
    sid = models.CharField(max_length=15, verbose_name='学号')
    name = models.CharField(max_length=20, verbose_name='名字')
    yuWen = models.DecimalField(max_digits=3, decimal_places=1, verbose_name='语文')
    shuXue = models.DecimalField(max_digits=3, decimal_places=1, verbose_name='数学')

PS:这里我没有设置主键,django会自动添加生成一个名为id的字段,并自增

3.2 使用makemigrations命令生成迁移文件

在生成迁移文件,可以使用makemigrations命令,这样它会把之前的变化所做的修改涉及数据库的,会保存到迁移模块app/migrations中。

这个很简单只要执行一下命令即可。

在pycharm最下方,选择终端terminal,执行

# 也可以python manage.py makemigrations app
python manage.py makemigrations

这样生成一个app/migrations/0001_initial.py文件

3.3 使用migrate迁移命令生成相关的表

3.3.1 创建django数据库

使用migrate迁移命令只会生成对应的表,不会创建数据库,所以要先创建一个数据库。

在这里按上面settings中的mysql配置,得知数据库为django,所以我创建一个django空数据库

PS:你也可以尝试不创建数据库,直接执行看一下报错提示。

3.3.2 使用migrate命令生成相关的表

在pycharm最下方,选择终端terminal,执行如下命令:

python manage.py migrate

从上图中看到,会创建一堆表,主要是看settings中的 NSTALLED_APPS 配置,我的如下:

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

看一下mysql是否生成相关的表,如图所示:

PS:其中app_stu 就是我在app模块定义的Stu类,表的格式为

<model所以的应用名>_<model.py中的类名>

所以我的为app_Stu,这个表是空的,没数据的

四、测试效果

4.1 为stu表填写数据

为了方便测试,我要在上面的app_Stu表中添加一些数据。

使用Webyog SQLyog连接上mysql,并输入如下sql命令并执行

INSERT  INTO app_stu (`id`,`sid`,`name`,`yuWen`,`shuXue`) VALUES 
(1,'001','张三',51.0,65.0),
(2,'002','李四',71.0,80.0),
(3,'003','王五',87.6,90.0),
(4,'004','陈六',55.9,88.0),
(5,'005','谢九',77.0,59.0),
(6,'006','天天',45.0,90.0),
(7,'007','开心',70.0,100.0),
(8,'008','乐儿',65.0,50.0),
(9,'009','乐乐',88.0,29.5),
(10,'010','笑笑',73.0,69.0),
(11,'011','fly',90.0,89.0),
(12,'012','乐天',90.0,70.0),
(13,'013','云儿',95.0,65.0),
(14,'014','伊洛',14.0,70.0),
(15,'015','abc',86.0,98.0),
(16,'016','菲菲',90.0,99.0),
(17,'017','mm',71.0,61.0),
(18,'018','lilei',98.0,61.0),
(19,'019','hua',90.0,99.5);

执行SELECT * FROM app_stu; 命令,结果如下:

4.2 做一个简单的查询

4.2.1 django的查询知识

在这里我做一个简单的基于学号查学生成绩的代码。如何查询 ,在专题指南 中的《执行查询》做了如下说明:

检索对象

要从数据库检索对象,要通过模型类的 Manager 构建一个 QuerySet

一个 QuerySet 代表来自数据库中对象的一个集合。它可以有 0 个,1 个或者多个 filters. Filters,可以根据给定参数缩小查询结果量。在 SQL 的层面上, QuerySet 对应 SELECT 语句,而*filters*对应类似 WHERE 或 LIMIT 的限制子句。

你能通过模型的 Manager 获取 QuerySet。每个模型至少有一个 Manager,默认名称是 objects。像这样直接通过模型类使用它:

注:Managers 只能通过模型类访问,而不是通过模型实例,目的是强制分离 “表级” 操作和 “行级” 操作。

所以我们可以直接使用.objects操作,返回一个QuerySet

4.2.2 序列化转成json格式

上面的查询得到的是查询集QuerySet,是pythoin的object类型,因为前后端分离,我们还得要显示为方便网络传输的json格式。

要使用到json需要用到django的序列化相关内容,可以看专题指南 中的《序列化 Django 对象》。

结合种一个例子

serializers.serialize('xml', Restaurant.objects.all())

它使用的是xml,我们把把修改为json就行了,这样就变成了

serializers.serialize('json', <查询集>)

4.2.3 视图中添加查询代码

从上面的思路得到了代码,打开app/views.py,添加如下代码

def stuBySid(request, stuSid):
    res=Stu.objects.filter(sid=stuSid)
    return HttpResponse(serializers.serialize("json", res))

4.2.4 配置url路由

打开app/urls.py,在urlpatterns添加如下代码:

path('sid/<str:StuSid>', views.stuBySid, name='stuBysid')

总代码如下:

from django.urls import path
from app import views

urlpatterns = [
    path('', views.index, name="index"),
    path('sid/<str:stuSid>', views.stuBySid, name='stuBysid')
]

上面<str:StuSid>的意思是<>表示正则表达式,携带参数,str表示字符串,StuSid对应函数的参数名,一定要对应上,要不报错。

4.3 效果

运行django,输入 http://127.0.0.1:8000/sid/001 查看一下效果:

PS:001的意思是学号,这个是在没有前端的条件下手工输入的。

PSS:我们学过点开发基础的都知道,正常写是http://127.0.0.1:8000/sid?stuSid=001

而把?号变斜杠,把变量名省去,变成sid/<变量值>,这样方式叫url的pathinfo模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值