【玩转全栈】----Django连接MySQL

阅前先赞,养好习惯!

目录

1、ORM框架介绍

选择建议

2、安装mysqlclient

3、创建数据库

4、修改settings,连接数据库

5、对数据库进行操作

创建表

删除表

添加数据

删除数据

修改(更新)数据:

获取数据


1、ORM框架介绍

之前讲过MySQL连接pymysql,PyMySQL 是一个纯 Python 实现的 MySQL 客户端库,用于直接与 MySQL 数据库交互。通过 PyMySQL,可以发送原生 SQL 查询语句,并获取查询结果。但是大家也能看到,PyMySQL的一些语句其实和MySQL是差不多的,并且代码比较繁琐,切换数据库也很麻烦,要修改大量代码。

现在来介绍另一种方法:ORM

Django 的 ORM(Object-Relational Mapping)是一种将数据库表和 Python 类关联起来的工具,允许开发者通过操作 Python 对象来与数据库交互,而不需要直接编写 SQL 查询。

两者区别:

特性

Django ORM

PyMySQL

开发效率

高:无需手写 SQL,直接用 Python 操作数据库。

低:需要手写 SQL,代码量多,容易出错。

代码可读性

高:简洁、结构化,贴近业务逻辑。

中:需要理解 SQL 和 Python 代码的混合逻辑。

数据库独立性

强:支持多种数据库(MySQL、PostgreSQL、SQLite 等),切换数据库只需更改配置,无需改动代码。

弱:依赖 MySQL,切换数据库需要修改大量 SQL。

学习成本

低:只需学习 Django 的模型和查询 API。

高:需要熟悉 SQL 语法和数据库操作。

性能

中:抽象层带来开销,复杂查询可能性能较低。

高:直接发送 SQL,性能更高。

功能扩展

高:内置丰富功能,如分页、外键、查询优化等。

低:需要自己实现复杂功能。

错误处理

自动处理,减少手动处理的错误风险。

完全依赖开发者,错误处理工作量大。

选择建议
  • 使用 Django ORM

    • 开发 Django 项目时,优先选择 ORM。它能大幅提升开发效率,特别是对于中小型项目。
    • 如果项目大部分操作是增删改查,ORM 是首选。
  • 使用 PyMySQL

    • 如果需要处理复杂的 SQL 查询或高性能场景,可以结合 PyMySQL 使用。例如,在 Django 项目中,使用 ORM 完成大部分逻辑,少数复杂场景下直接用 PyMySQL 或 raw SQL 查询。
    • 非 Django 项目,且对性能要求极高时,选择 PyMySQL。

ORM是一个框架,可以通过PyMySQL工具来操作MySQL,而在Django开发中,一般使用mysqlclient工具而并非PySQL,有两个原因,一个是Django 官方文档中明确推荐使用 mysqlclient ,因为它和 Django 的 ORM 紧密集成,兼容性经过了长期验证;还有就是**mysqlclient的性能要好一点。**

Orm将数据库基本语句弄得更简单,将简单的语句翻译成数据库原生代码。

2、安装mysqlclient

打开控制台输入:

复制代码
pip install mysqlclient

安装成功界面:

3、创建数据库

由于mysqlclient无法创建数据库,所以得我们自己创建,详细教程前文有说:

【全栈开发】----Mysql基本配置与使用-CSDN博客

进入到mysql>下,输入:

复制代码
create database mydata default character set utf8;

并检查mydata是否已被创建

复制代码
show databases;

4、修改settings,连接数据库

打开settings文件,这里是默认的连接sqlite3,这也是一种数据库,我们要改成MySQL的,先把这段代码注释。

输入:

复制代码
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  #django连接mysql,还可以连oracle、sqlite3、postgresql等等
        'NAME': 'mydata',  #数据库名字
        'USER':'root',  #用户
        'PASSWORD':'612612',  #密码
        'HOST':'127.0.0.1',  #主机
        'PORT':'3306',  #端口
    }
}

注意!大家的数据库名称和密码可能与我不一样,修改一下即可

5、对数据库进行操作

创建表

在app的models文件中,每新建一个类,就是创建一张表,类需继承models类

复制代码
class Department(models.Model):
    title = models.CharField(max_length=32)

例如上面的Department类就是创建了一张表,表中有title行,32位字符型

复制代码
class UserInfo(models.Model):  #继承models类
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    age = models.IntegerField()

UserInfo类定义了一个长度为32的字符串行name,长度为64的字符串行password,有符号情况下最多十位的整型age行。

类名代替表名,字段名代表列名

上面的UserInfo类其实就相当于MySQL中的:

复制代码
create table app01_userinfo(
    id bigint auto_increment primary key,
    name varchar(32),
    password varchar(64),
    age int,
)

运行命令如下:

复制代码
python manage.py makemigrations
python manage.py migrate

在Pycharm终端依次输入运行即可

注意前提是下载了mysqlclient库,并且app已注册

检查表是否创建成功:

复制代码
desc app01_userinfo;

**注意!!!**虽然我们在models中创建的是UserInfo类,但mysqlclient处理后真正的表名是

应用名+_+类(类全小写)

所以此处表名是 app01_userinfo

创建表后还能再添加字段吗?当然是可以的

在类中再添加一个字段,输入:

复制代码
size = models.IntegerField()

运行后提示:

1、要是选择1的话,点击Enter,会提示让您输入一个默认值,然后那一列都将是那个默认值。

2、要是选2的话,并且没有任何操作,数据库中将不会显示新加的数据。

3、选2后,在源代码中添加默认值,将会出现数据。

复制代码
size = models.IntegerField(default=2)

也可以将数据设置成空:

复制代码
size = models.IntegerField(null=True,blank=True)

删除表

删除表很简单,只需要将类注释或者直接删掉,再输入这两行命令刷新即可

复制代码
python manage.py makemigrations
python manage.py migrate

添加数据

新建一个url,用来测试是否添加数据

复制代码
def orm(requests):
    # 测试orm操作表中的数据
    
    return HttpResponse("成功")

增加数据命令:

复制代码
UserInfo.objects.create(name="谭谈",password="1234",age=18)

启动项目,发现数据确实是添加进去了

大家可以自己再多添加几行数据,便于后面的修改与删除

删除数据

删除满足特定条件的数据:

复制代码
Department.objects.filter(id=2).delete()

确实是删除了

删除全部数据:

这就不演示了,大家可以自己玩玩

复制代码
UserInfo.objects.all().delete()

修改(更新)数据:

复制代码
UserInfo.objects.filter(id=1).update(name="有的兄弟")

确实是修改了

获取数据

使用.all()方法获取数据

复制代码
data_list = UserInfo.objects.all()
print(data_list)

可以先在控制台打印看看

发现拿到的是一个QuerySet对象,包含三个数据,每个数据后面的数字代表ID值

可以通过迭代器和点属性来获取具体的值:

复制代码
    for data in data_list:
        print(data.id,data.name,data.password,id.age)

发现确实是被正确获取并打印了:

获取到的QuerySet可以通过索引和其他方法取值,常见的有以下三种,我就不一一介绍了,大家可以自己玩玩:

.first() vs .get() vs [0]

方法

返回值

异常处理

使用场景

.first()

第一条记录或 None

不抛出异常

不确定是否有数据时更安全

.get()

符合条件的唯一对象

抛出 DoesNotExist 异常

确定条件只会返回一条数据时使用

[0]

第一条记录或抛出 IndexError

抛出 IndexError 异常

确定有数据且只需第一条时使用

本次分享就到这儿了

下一篇博客更新用户管理综合案例!!!

感谢您的三连!!!

相关推荐
Boilermaker19922 小时前
【MySQL】备份与恢复
数据库·mysql
清静诗意2 小时前
Django REST Framework(DRF)RESTful 最完整版实战教程
python·django·restful·drf
Hello.Reader3 小时前
Flink DataStream API 打包使用 MySQL CDC 连接器
大数据·mysql·flink
小蜗牛爱远行3 小时前
mysql导入中文乱码问题
数据库·mysql
雨白3 小时前
深入理解 Android DocumentFile:性能陷阱与最佳实践
android
inputA3 小时前
【LwIP源码学习8】netbuf源码分析
android·c语言·笔记·嵌入式硬件·学习
CHINAHEAO3 小时前
FlyEnv+Bagisto安装遇到的一些问题
android
毕设源码-郭学长3 小时前
【开题答辩全过程】以 基于Android的自习室座位预订系统为例,包含答辩的问题和答案
android
一 乐4 小时前
健康打卡|健康管理|基于java+vue+的学生健康打卡系统设计与实现(源码+数据库+文档)
android·java·数据库·vue.js·spring boot·微信小程序