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

django的增删改查,排序,分组等常用的ORM操作

Django 的 ORM(对象关系映射)提供了一种方便的方式来与数据库进行交互。

1. Django模型


在 `myapp/models.py` 中定义一个示例模型:```python
from django.db import modelsclass Person(models.Model):name = models.CharField(max_length=100)age = models.IntegerField()city = models.CharField(max_length=100)def __str__(self):return self.name

运行迁移命令来创建数据库表:

python manage.py makemigrations
python manage.py migrate

2. 增 (Create)

创建单个对象
from myapp.models import Person# 创建并保存一个新对象
person = Person(name='Alice', age=25, city='New York')
person.save()
使用 create() 方法
person = Person.objects.create(name='Bob', age=30, city='Los Angeles')

3. 查 (Read)

获取所有对象
people = Person.objects.all()
for person in people:print(person.name, person.age, person.city)
获取单个对象
person = Person.objects.get(id=1)
print(person.name, person.age, person.city)
使用过滤器
# 获取所有年龄大于25的人
people = Person.objects.filter(age__gt=25)
for person in people:print(person.name, person.age, person.city)

4. 改 (Update)

更新单个对象
person = Person.objects.get(id=1)
person.age = 26
person.save()
批量更新
Person.objects.filter(city='New York').update(city='NYC')

5. 删 (Delete)

删除单个对象
person = Person.objects.get(id=1)
person.delete()
批量删除
Person.objects.filter(age__lt=20).delete()

6. 排序 (Ordering)

按单个字段排序
people = Person.objects.all().order_by('age')
for person in people:print(person.name, person.age, person.city)
按多个字段排序
people = Person.objects.all().order_by('city', '-age')
for person in people:print(person.name, person.age, person.city)

7. 分组 (Grouping)

Django ORM 不直接支持分组操作,但可以使用 annotateaggregate 方法来实现类似的功能。

使用 annotate 进行分组计数
from django.db.models import Count# 按城市分组并计数
city_counts = Person.objects.values('city').annotate(count=Count('id'))
for city_count in city_counts:print(city_count['city'], city_count['count'])
使用 aggregate 进行聚合操作
from django.db.models import Avg, Max, Min# 计算平均年龄
average_age = Person.objects.aggregate(Avg('age'))
print(average_age)  # 输出: {'age__avg': 27.5}# 计算最大和最小年龄
age_stats = Person.objects.aggregate(Max('age'), Min('age'))
print(age_stats)  # 输出: {'age__max': 30, 'age__min': 25}

8. 复杂查询

Q 对象进行复杂查询
from django.db.models import Q# 获取年龄大于25或城市为'New York'的人
people = Person.objects.filter(Q(age__gt=25) | Q(city='New York'))
for person in people:print(person.name, person.age, person.city)
F 对象进行字段间比较
from django.db.models import F# 获取年龄大于等于城市长度的人
people = Person.objects.filter(age__gte=F('city__length'))
for person in people:print(person.name)
http://www.lryc.cn/news/397988.html

相关文章:

  • Leetcode Java学习记录——树、二叉树、二叉搜索树
  • 华为HCIP Datacom H12-821 卷30
  • element el-table实现表格动态增加/删除/编辑表格行,带校验规则
  • QT调节屏幕亮度
  • 实变函数精解【3】
  • JVM:SpringBoot TomcatEmbeddedWebappClassLoader
  • 蜂窝互联网接入:连接世界的无缝体验
  • Sprint Boot 2 核心功能(一)
  • GitLab CI/CD实现项目自动化部署
  • 阿里云调整全球布局关停澳洲云服务器,澳洲服务器市场如何选择稳定可靠的云服务?
  • 排序(二)——快速排序(QuickSort)
  • <数据集>穿越火线cf人物识别数据集<目标检测>
  • a+=1和a=a+1的区别
  • 设计模式使用场景实现示例及优缺点(结构型模式——桥接模式)
  • Spring——自动装配Bean
  • 云端典藏:iCloud中个人收藏品目录的智能存储方案
  • 安全开发基础篇-数据溢出
  • Scanner工具类
  • springboot3 集成GraalVM
  • HumanoidBench——模拟仿人机器人算法有未来
  • 实现前端用户密码重置功能(有源码)
  • 《双流多依赖图神经网络实现精确的癌症生存分析》| 文献速递-基于深度学习的多模态数据分析与生存分析
  • 【Hive SQL 每日一题】在线峰值人数计算
  • 谷粒商城学习笔记-18-快速开发-配置测试微服务基本CRUD功能
  • 机器学习库实战:DL4J与Weka在Java中的应用
  • MongoDB教程(一):Linux系统安装mongoDB详细教程
  • leetcode74. 搜索二维矩阵
  • Redis 布隆过滤器性能对比分析
  • Java List不同实现类的对比
  • 【C语言】 —— 预处理详解(下)