当前位置: 首页 > news >正文

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

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

创建 (Create)

Django Models:

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

MySQL SQL:

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

读取 (Read)

获取单个对象

Django Models:

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

MySQL SQL:

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

Django Models:

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

MySQL 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:

-- 统计总数
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:

-- 更新单个对象
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:

-- 删除单个对象
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.lryc.cn/news/509751.html

相关文章:

  • 双指针——快乐数
  • Docker 默认安装位置迁移
  • jmeter跨进程实现变量共享-全局变量
  • Vue.js组件(6):echarts组件
  • yolov3算法及其改进
  • Python + 深度学习从 0 到 1(02 / 99)
  • HTML+CSS+JS制作在线书城网站(内附源码,含5个页面)
  • 【FastAPI】中间件
  • 5个实用的设计相关的AI网站
  • STL 六大组件
  • Python选择题训练工具:高效学习、答题回顾与音频朗读一站式体验
  • Python实现机器学习驱动的智能医疗预测模型系统的示例代码框架
  • AWS Certified AI Practitioner 自学考试心得
  • JQ中的each()方法与$.each()函数的使用区别
  • 滚珠丝杆与直线导轨的区别
  • 【Ovis】Ovis1.6的本地部署及推理
  • C语言结构体位定义(位段)的实际作用深入分析
  • 儿童影楼管理系统:基于SSM的创新设计与功能实现
  • 青蛇人工智能学家
  • uniapp+vue 前端防多次点击表单,防误触多次请求方法。
  • 【ES6复习笔记】rest参数(7)
  • Hive SQL 窗口函数 `ROW_NUMBER() ` 案例分析
  • 前端mock数据 —— 使用Apifox mock页面所需数据
  • 车载U盘制作教程:轻松享受个性化音乐
  • springboot 3 websocket react 系统提示,选手实时数据更新监控
  • 现代图形API综合比较:Vulkan DirectX Metal WebGPU
  • 【Hot100刷题计划】Day04 栈专题 1~3天回顾(持续更新)
  • 用VBA将word文档处理成支持弹出式注释的epub文档可用的html内容
  • 舵机原理介绍 简洁讲解面向实战 非阻塞式驱动代码, arduino
  • Oracle Database 23ai 中的DBMS_HCHECK