阅前先赞,养好习惯!
目录
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。
- 如果需要处理复杂的 SQL 查询或高性能场景,可以结合 PyMySQL 使用。例如,在 Django 项目中,使用 ORM 完成大部分逻辑,少数复杂场景下直接用 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 异常 | 确定有数据且只需第一条时使用 |
本次分享就到这儿了
下一篇博客更新用户管理综合案例!!!
感谢您的三连!!!