网站两侧广告,做网站的表情包,网站做动态还是静态,靖江网站阅前先赞#xff0c;养好习惯#xff01; 目录 1、ORM框架介绍 选择建议 2、安装mysqlclient 3、创建数据库 4、修改settings#xff0c;连接数据库 5、对数据库进行操作 创建表 删除表 添加数据 删除数据 修改#xff08;更新#xff09;数据#xff1a; 获取数据 1、OR…
阅前先赞养好习惯 目录 1、ORM框架介绍 选择建议 2、安装mysqlclient 3、创建数据库 4、修改settings连接数据库 5、对数据库进行操作 创建表 删除表 添加数据 删除数据 修改更新数据 获取数据 1、ORM框架介绍 之前讲过MySQL连接pymysqlPyMySQL 是一个纯 Python 实现的 MySQL 客户端库用于直接与 MySQL 数据库交互。通过 PyMySQL可以发送原生 SQL 查询语句并获取查询结果。但是大家也能看到PyMySQL的一些语句其实和MySQL是差不多的并且代码比较繁琐切换数据库也很麻烦要修改大量代码。
现在来介绍另一种方法ORM
Django 的 ORMObject-Relational Mapping是一种将数据库表和 Python 类关联起来的工具允许开发者通过操作 Python 对象来与数据库交互而不需要直接编写 SQL 查询。
两者区别
特性Django ORMPyMySQL开发效率高无需手写 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_length32)
例如上面的Department类就是创建了一张表表中有title行32位字符型
class UserInfo(models.Model): #继承models类name models.CharField(max_length32)password models.CharField(max_length64)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(default2)
也可以将数据设置成空
size models.IntegerField(nullTrue,blankTrue) 删除表
删除表很简单只需要将类注释或者直接删掉再输入这两行命令刷新即可
python manage.py makemigrations
python manage.py migrate 添加数据
新建一个url用来测试是否添加数据
def orm(requests):# 测试orm操作表中的数据return HttpResponse(成功)
增加数据命令
UserInfo.objects.create(name谭谈,password1234,age18)
启动项目发现数据确实是添加进去了 大家可以自己再多添加几行数据便于后面的修改与删除 删除数据
删除满足特定条件的数据
Department.objects.filter(id2).delete()
确实是删除了 删除全部数据
这就不演示了大家可以自己玩玩
UserInfo.objects.all().delete() 修改更新数据
UserInfo.objects.filter(id1).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 异常确定有数据且只需第一条时使用 本次分享就到这儿了
下一篇博客更新用户管理综合案例
感谢您的三连