Django ORM使用

embedded/2024/10/25 12:25:02/

1.基本操作

1.1 添加

(1)save()

通过创建模型类对象,执行对象的save()方法保存到数据库中。

python">student = Student(name="测试",age=17,sex=True
)
student.save() # 保存
print(student.id) # 判断是否新增有ID

(2)create()

通过模型类.objects.create()保存,返回生成的模型类对象。

python">student = Student.object.create(name="测试",age=17,sex=True
)
print(student.id) # 判断是否新增有ID

1.2 查询

ORM中针对查询结果的限制,提供了一个查询集[QuerySet].这个QuerySet,是ORM中针对查询结果进行保存数据的一个类型,我们可以通过了解这个QuerySet进行使用,达到查询优化,或者限制查询结果数量的作用。

(1)all()

查询所有对象,返回queryset对象。

(2)filter()

筛选条件相匹配的对象,返回queryset对象。

(3)get()

 返回与所给筛选条件相匹配的对象,返回结果有且只有一个, 如果符合筛选条件的对象超过一个或者没有都会抛出错误。

如果查询到多个结果,报错为:MultipleObjectsReturned

数据不存在,报错为:DoesNotExist

(4)first()、last()

first:查询查询集的第一条记录

last:查询查询集的最后一条记录

(5)exclude()

筛选条件不匹配的对象,返回queryset对象,和filter相反。

(6)order_by()

对查询结果排序

order_by("字段")  # 按指定字段正序显示,相当于 asc  从小到大
order_by("-字段") # 按字段倒序排列,相当于 desc 从大到小
order_by("第一排序","第二排序",...)

(7)count()

查询集中对象的个数

python"># 查询所有男生的个数
count = Student.objects.filter(sex=1).count()

(8)exists()

判断查询集中是否有数据,如果有则返回True,没有则返回False

python"># 查询Student表中是否存在学生
print(Student.objects.exists())

(9)values()、values_list()

  • value()把结果集中的模型对象转换成字典,并可以设置转换的字段列表,达到减少内存损耗,提高性能

  • values_list(): 把结果集中的模型对象转换成列表,并可以设置转换的字段列表(元祖),达到减少内存损耗,提高性能

(10)distinct()

从返回结果中剔除重复纪录。返回queryset。

(11)F查询

模型对象中俩个属性如何进行比较

python">"""F对象:2个字段的值比较"""
# 获取从添加数据以后被改动过数据的学生
from django.db.models import F
# SQL: select * from db_student where created_time=updated_time;
student_list = Student.objects.exclude(created_time=F("updated_time"))
print(student_list)

(2)Q查询

多个过滤器逐个调用表示逻辑与关系,同sql语句中where部分的and关键字。

例:查询年龄大于20,并且编号小于30的学生。


http://www.ppmy.cn/embedded/97976.html

相关文章

DHU OJ 二维数组

思路及代码 #include<iostream> using namespace std; int main(){ //input 多组 //input M,N int 1< <20 //input M 行 N 列 数据 //initialize listint M, N;while (cin >> M >> N){int list[M][N];for (int i 0; i < M-1; i){for (int j 0; j…

Prompt——与AI连接的桥梁

哇塞&#xff0c;Prompt真是个神奇的东西呢&#xff01;&#x1f31f; 它就像是对机器小精灵的魔法咒语&#xff0c;用对了&#xff0c;它们就能变出令人惊喜的宝藏。&#x1f52e; 想象一下&#xff0c;Prompt就像是给机器人的小脑瓜里输入了一个“想法种子”&#xff0c;然后…

基于STM32的农业病虫害检测检测系统:OpenCV、MQTT、Flask框架、MySQL(代码示例)

一、项目概述 随着全球农业现代化的不断推进&#xff0c;智能农业监测系统应运而生。此项目旨在通过实时监测土壤湿度、温度等环境数据&#xff0c;结合作物生长状态的分析&#xff0c;提高农业生产效率和作物质量。通过引入STM32单片机、OpenCV图像处理技术和后端数据分析系统…

基于Django的停车场车辆出入管理系统,可识别车牌图片

研究背景 随着城市化进程的加快&#xff0c;车辆数量不断增加&#xff0c;停车场的管理成为一个日益重要的课题。传统的停车场管理系统依赖人工登记和监控&#xff0c;不仅效率低下&#xff0c;而且容易出现疏漏和错误&#xff0c;难以满足现代社会对停车场管理智能化、高效化…

LeetCode.80.删除有序数组中的重复项II

题目描述&#xff1a; 给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) 额外空间…

【数据结构】队列的实现

0. 前言 上期博客给大家讲解了 栈 以及 栈的实现&#xff0c;今天再给大家讲一个特殊的顺序表结构&#xff0c;那就是队列&#xff01; 下面就进入正题&#xff01;一起学习一下吧&#xff01; 1. 队列 1.1 队列的概念 队列&#xff1a;只允许在一端进行插入数据操作&…

全网最详细Linux安装openJDK教程

目录 前言&#xff1a;这看似很简单的jdk环境变量配置&#xff0c;但是里面很多坑&#xff0c;有些安装包可能是错误的&#xff0c;倒是环境变量配置正确&#xff0c;但是环境没生效。 1.找到正确的JDK版本 Index of /Adoptium/8/jdk/x64/linux/ | 清华大学开源软件镜像站 | T…

如何挑选高性价比蓝牙耳机?四款2024出众耳机品牌盘点推荐!

在数字化时代&#xff0c;蓝牙耳机已成为我们日常生活中不可或缺的一部分。无论是通勤路上、运动时&#xff0c;还是工作学习中&#xff0c;一款好的蓝牙耳机总能给我们带来极致的音乐体验。然而&#xff0c;面对市面上琳琅满目的产品&#xff0c;在预算有限的情况下如何挑选高…