django的增删改查,排序,分组等常用的ORM操作
创始人
2025-01-08 21:05:07
0次

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

1. Django模型

 在 `myapp/models.py` 中定义一个示例模型:  ```python from django.db import models  class 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 不直接支持分组操作,但可以使用 annotate 和 aggregate 方法来实现类似的功能。

使用 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) 

上一篇:centos清空history

下一篇:初识Spring Web MVC

相关内容

热门资讯

一分钟揭秘辅助!微乐小程序游戏... 一分钟揭秘辅助!微乐小程序游戏破解器,微乐家乡小程序修改器-一直真的有辅助挂1)微乐小程序游戏破解器...
技术分享开挂!微信小程序微乐辅... 技术分享开挂!微信小程序微乐辅助器,微乐贵阳捉鸡麻将能不能开挂-一贯是真的有辅助工具在进入微信小程序...
科技介绍开挂!微乐小程序家乡自... 科技介绍开挂!微乐小程序家乡自建房辅助app,微乐自建房脚本如何下载-其实是有辅助神器1、超多福利:...
重大通报辅助!微信小程序微乐辅... 重大通报辅助!微信小程序微乐辅助器教程,微乐小程序微乐家乡辅助器-都是真的有辅助插件重大通报辅助!微...
玩家必备教程辅助!微信小程序游... 玩家必备教程辅助!微信小程序游戏破解微乐游戏,微信小程序微乐安徽辅助苹果-确实有辅助脚本1、完成微信...
科技分享开挂!微乐手游辅助脚本... 科技分享开挂!微乐手游辅助脚本平台,微乐小程序辅助器免费-其实有辅助神器一、微乐手游辅助脚本平台可以...
发现玩家辅助!微乐小程序辅助工... 您好,微乐小程序辅助工具这款游戏可以开挂的,确实是有挂的,需要了解加去威信【136704302】很多...
推荐一款透视挂!微乐小程序家乡... 推荐一款透视挂!微乐小程序家乡自建房辅助app,微乐河南小程序微乐辅助脚本-原来存在有辅助挂微乐小程...
一起来探讨开挂!微乐小程序开挂... 一起来探讨开挂!微乐小程序开挂黑科技,微乐自建房免费黑科技推荐-本来真的是有辅助脚本小薇(辅助器软件...
2024教程辅助!微信小程序微... 2024教程辅助!微信小程序微乐辅助免费,微乐小程序辅助教程-都是是真的有辅助挂1、点击下载安装,微...