Django models中的增删改查与MySQL SQL的对应关系

ops/2024/12/26 15:39:10/

在 Django 中,models 提供了一种高层次的抽象来与数据库进行交互,使得开发者可以使用 Python 代码而非直接编写 SQL 来执行增删改查(CRUD)操作。下面将详细介绍 Django 的 ORM(对象关系映射)操作如何对应到 MySQL 的 SQL 查询。

创建 (Create)

Django Models:

# 创建并保存一个新对象
new_entry = MyModel(field1='value1', field2='value2')
new_entry.save()

MySQL SQL:

sql">INSERT INTO myapp_mymodel (field1, field2) VALUES ('value1', 'value2');

读取 (Read)

获取单个对象

Django Models:

# 根据主键获取一个对象
entry = MyModel.objects.get(id=1)

MySQL SQL:

sql">SELECT * FROM myapp_mymodel WHERE id = 1;
获取多个对象

Django Models:

# 获取所有对象
entries = MyModel.objects.all()# 使用过滤条件获取对象
filtered_entries = MyModel.objects.filter(field1='value1')

MySQL SQL:

sql">-- 获取所有对象
SELECT * FROM myapp_mymodel;-- 使用 WHERE 子句过滤
SELECT * FROM myapp_mymodel WHERE field1 = 'value1';
聚合查询

Django Models:

from django.db.models import Count# 统计总数
count = MyModel.objects.count()# 分组统计
grouped = MyModel.objects.values('field1').annotate(count=Count('id'))

MySQL SQL:

sql">-- 统计总数
SELECT COUNT(*) FROM myapp_mymodel;-- 分组统计
SELECT field1, COUNT(id) AS count FROM myapp_mymodel GROUP BY field1;

更新 (Update)

Django Models:

# 更新单个对象
entry = MyModel.objects.get(id=1)
entry.field1 = 'new_value'
entry.save()# 批量更新
MyModel.objects.filter(field1='old_value').update(field1='new_value')

MySQL SQL:

sql">-- 更新单个对象
UPDATE myapp_mymodel SET field1 = 'new_value' WHERE id = 1;-- 批量更新
UPDATE myapp_mymodel SET field1 = 'new_value' WHERE field1 = 'old_value';

删除 (Delete)

Django Models:

# 删除单个对象
entry = MyModel.objects.get(id=1)
entry.delete()# 批量删除
MyModel.objects.filter(field1='value1').delete()

MySQL SQL:

sql">-- 删除单个对象
DELETE FROM myapp_mymodel WHERE id = 1;-- 批量删除
DELETE FROM myapp_mymodel WHERE field1 = 'value1';

高级查询

Django 的 ORM 还支持更复杂的查询,例如联合查询、子查询等,这些都可以通过 Django 的 Q 对象和 F 表达式来实现。对于非常复杂的查询,如果 ORM 不足以满足需求,Django 还允许直接执行原始 SQL 查询:

from django.db import connectiondef custom_sql(query, params=None):with connection.cursor() as cursor:cursor.execute(query, params)return cursor.fetchall()

这使得您可以根据需要灵活地选择是使用 ORM 抽象还是直接编写 SQL 查询。

总之,Django 的 ORM 提供了一个强大而灵活的方式来与数据库交互,简化了数据访问层的开发工作,并且自动处理了许多底层细节,如事务管理、连接池等。同时,它也保持了足够的灵活性,以应对复杂的查询需求。


http://www.ppmy.cn/ops/145150.html

相关文章

【ChatGPT】OpenAI 如何使用流模式进行回答

当你向 OpenAI 请求完成时,默认情况下,整个回复会在一次性响应中全部生成并返回给你。如果你正在生成的回复内容较长,等待完整回复的时间可能会让人觉得有点漫长——好几秒钟呢!为了能更快地获取到部分回复,你可以选择…

7种server的服务器处理结构模型

两种高效的事件处理模式 服务器程序通常需要处理三类事件:I/O 事件、信号及定时事件。有两种高效的事件处理模式:Reactor和 Proactor,同步 I/O 模型通常用于实现Reactor 模式,异步 I/O 模型通常用于实现 Proactor 模式。 无论是 …

驱动与用户空间的交互函数

ssize_t read(int fd, void *buf, size_t count, loff_t *offt) fd:要打开的设备文件(文件描述符); buf:返回给用户空间的数据缓冲区; count:要读取的数据长度; offt:相对于文件首地址的偏移…

鸿蒙UI开发——自定义主题色

1、概述 ArkTs提供了应用内主题切换功能,支持全局主题切换,也支持局部主题切换,效果如下。本文针对主题切换做简单介绍。 2、主题色 ArkTs提供了一套内置主题配色,有Colors对象持有,它包含了默认情况下,关…

数据结构之栈,队列,树

目录 一.栈 1.栈的概念及结构 2.栈的实现 3.实现讲解 1.初始化栈 2.销毁栈 3.压栈 4.出栈 5.返回栈顶元素 6.返回栈内元素个数 7.判断栈内是否为空 二.队列 1.队列的概念及结构 2.队列的实现 3.实现讲解 1.初始化队列 2.销毁队列 3.单个成员入队列 4.单个成员…

08 Django - Django媒体文件静态文件文件上传

九、Django媒体文件&静态文件&文件上传 1.静态文件和媒体文件 媒体文件: 用户上传的文件, 叫做media静态文件: 存放在服务器的 css, js, image等,叫做static 在Django中使用静态文件 {% static img/example.jpg %} > static模板关键字就是在settings.py中指定的…

前端Pako.js 压缩解压库 与 Java 的 zlib 压缩与解压 的互通实现

工具介绍: pako.js 前端压缩解压的库(包含 zlib 和gzip 两种实现,这里只介绍 zlib) pako 2.0.4 API documentation Java8 原生支持 zlib 和 gzip 业务场景 因为数据太大,网络环境不可控。故前端需要将数据 A 先压缩…

PCL点云库入门——PCL库点云滤波算法之直通滤波(PassThrough)和条件滤波(ConditionalRemoval)

0、滤波算法概述 PCL点云库中的滤波算法是处理点云数据不可或缺的一部分,它们能够有效地去除噪声、提取特征或进行数据降维。例如,使用体素网格滤波(VoxelGrid)可以减少点云数据量,同时保留重要的形状特征。此外&#…