Django 模型操作(六)

       Django通过Model操作数据库, 不管你数据库的类型是MySql或者Sqlite, Django自动帮你生成相应数据库类型的SQL语句,所以不需要关注SQL语句和类型,对数据的操作Django帮我们自动完成。只要会写Model就可以了。
    django使用对象关系映射 (Object Relational Mapping, 简称ORM)框架去操控数据库。
    ORM(Object Relational Mapping)对象关系映射, 是一种程序技术, 用于实现面向对象编程语言里不同类型系统的数据之间的转换。

一、模型

from django.db import models# Create your models here.
class StudentModel(models.Model):name=models.CharField(max_length=20,unique=True) #唯一的age=models.PositiveIntegerField(default=18)class Meta:db_table='student'verbose_name='学生'verbose_name_plural=verbose_name#重写字符串def __str__(self):return f'{self.name},{self.age}'#重写替换def __repr__(self):return f'{self.name},{self.age}'

  

 

二、CRUD的操作

 (1) 添加有4种方式

from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.# 添加数据
from User.models import StudentModel# 第一种方式
def save_stu(request):# 处理异常try:# 创建对象stu = StudentModel()# 给属性赋值stu.name = '刘芳'stu.age = 20# 保存数据(同步到数据库中)stu.save()except Exception as ex:return HttpResponse('添加失败!')# 返回return HttpResponse('添加成功!')# 第二种方式:
def save_stu2(request):# 处理异常try:# 创建对象stu = StudentModel(name='张三', age=19)# 保存数据(同步到数据库中)stu.save()except Exception as ex:return HttpResponse('添加失败!')# 返回return HttpResponse('添加成功!')# 第三种方式:
def save_stu3(request):# 处理异常try:# 创建对象StudentModel.objects.create(name='王涵', age=30)except Exception as ex:return HttpResponse('添加失败!')# 返回return HttpResponse('添加成功!')# 第四种方式:
def save_stu4(request):# 处理异常try:# 创建对象,并返回stu = StudentModel.objects.get_or_create(name='芬芳', age=21)print('stu=', stu)except Exception as ex:return HttpResponse('添加失败!')# 返回return HttpResponse('添加成功!')# 第五种方式:批量添加
def save_stu5(request):# 处理异常try:for i in range(5, 15):# 创建对象stu = StudentModel.objects.create(name=f'boy{i}', age=f'{i}')except Exception as ex:return HttpResponse('添加失败!')# 返回return HttpResponse('添加成功!')

说明:使用create方法是最常用的,第五种是批量添加数据

(2)删除数据(1条或多条)

# 删除一条数据
# (1) 先找到删除的数据
# (2) 再删除数据
def del_stu(request):# 处理异常try:# 创建对象stu = StudentModel.objects.first()  # 删除第一条数据stu.delete()  # 删除except Exception as ex:return HttpResponse('删除失败!')# 返回return HttpResponse('删除成功!')# 删除多条数据
# (1) 先找到删除的数据
# (2) 再删除数据
def del_stu2(request):# 处理异常try:StudentModel.objects.filter(age__gte=20).delete()  # 删除多条条件except Exception as ex:return HttpResponse('删除失败!')# 返回return HttpResponse('删除成功!')

 (3) 修改数据 (1条或多条)

  模型没有定义update方法, 直接给字段赋值, 并调用save, 能实现update的功能, 比如:
        obj = StudentModel.objects.get(id=2)
        obj.name = 'liu'
        obj.save()
    save更新时会更新所有字段。如果只想更新某个字段, 减少数据库操作, 可以这么做:
        obj.name = 'john'
        obj.save(update_fields=['name'])
 

# 更新一条数据
# (1) 先找到这条数据
# (2) 再修改数据
def update_stu(request):# 处理异常try:# 创建对象stu = StudentModel.objects.first()  # 第一条stu.name = 'mike'stu.age = 22# 保存到数据库中stu.save()except Exception as ex:return HttpResponse('更新失败!')# 返回return HttpResponse('更新成功!')# 更新1条数据
# (1) 先找到这条数据
# (2) 再修改数据
def update_stu2(request):# 处理异常try:# 创建对象stu = StudentModel.objects.get(id=18)  # 根据id条件stu.name = 'john'stu.age = 20# 保存到数据库中stu.save()except Exception as ex:return HttpResponse('更新失败!')# 返回return HttpResponse('更新成功!')# 更新多条数据
# (1) 先找到这条数据
# (2) 再修改数据
def update_stu3(request):# 处理异常try:# 创建对象StudentModel.objects.all().update(age=25)  # 所有数据更新年龄为25except Exception as ex:return HttpResponse('更新失败!')# 返回return HttpResponse('更新成功!')

 (4)查询数据

   get(): 获取单条数据:
        StudentModel.objects.get(id=100)
        如果没有找到符合条件的对象, 会引发模型类.DoesNotExist异常
        如果找到多个, 会引发模型类.MultipleObjectsReturned异常
    first(): 返回查询集(QuerySet)中的第一个对象
    last(): 返回查询集中的最后一个对象
    count(): 返回当前查询集中的对象个数
    exists(); 判断查询集中是否有数据, 如果有数据返回True没有反之False
    all(): 获取全部数据: StudentModel.objects.all()

# 查询操作
def get_stu(request):# (1) get():获得一条数据stu = StudentModel.objects.get(id=18)# first; 第一条数据# stu = StudentModel.objects.first()# last; 最后一条数据# stu = StudentModel.objects.last()# 打印print(stu, type(stu))print(stu.name, stu.age)# 返回return HttpResponse('查询成功!')def get_stu2(request):# (2) all():获得所有数据stu = StudentModel.objects.all()# 打印print(stu, type(stu))for st in stu:print(st.name, st.age)# 返回return HttpResponse('查询成功!')

查询 filter()过滤详解

def get_stu3(request):# (3) filter(): 过滤数据,(常使用)# stu=StudentModel.objects.filter()  #默认没有条件,就是获取所有的数据# stu=StudentModel.objects.filter(age__lte=26)  #有条件,age<=26,就是获取条件数据# stu=StudentModel.objects.filter(age__gte=26)  #有条件,age>=26,就是获取条件数据# stu=StudentModel.objects.filter(age__gt=26)  #有条件,age>26,就是获取条件数据# stu=StudentModel.objects.filter(age__lt=26)  #有条件,age<26,就是获取条件数据# 打印# print(stu, type(stu))# for st in stu:#     print(st.name, st.age)# 如果使用的对象是返回结果集的对象可以链接是使用的# print(stu.filter().filter().all().filter())# 注意:在使用链接对象一个对象如果是返回单个对象就表示链接结束# print(stu.filter().filter().get())# 显示调用中# print(stu.get())# print(stu.first())# print(stu.last())# 查询集是否存在数据如果存在数据为True,否则为False# print(stu.exists())# print(stu.all())# 查询数据中的个数# print(stu.count())# values方法和valeus_list()方法stus = StudentModel.objects.filter()# 查询原数据print(stus)# 查询的结果集强制转换成列表print(list(stus))# 列表套字典print(stus.values())# 列表套字典(这个是是字段名)print(stus.values('name', 'age'))# 列表套元组(只有值)print(stus.values_list())# 列表套元组(这个是是字段名)print(stus.values_list('name', 'age'))# 返回return HttpResponse('查询成功!')# filter详讲,类似于sql的where条件
def get_stu4(request):# in# stus = StudentModel.objects.filter(age__in=[16,18,21])# not in 取反# stus = StudentModel.objects.exclude(age__in=[16,18,21])# like 模糊查询# stus = StudentModel.objects.filter(name__contains='y1')# 正则表达式 匹配m开头 ,区分大小写# stus = StudentModel.objects.filter(name__regex='^m')# 不区分大小写# stus = StudentModel.objects.filter(name__iregex='^M')# range 在16-21之间范围# stus = StudentModel.objects.filter(age__range=[16, 21])# 以b开头,不区分大小写# stus = StudentModel.objects.filter(name__startswith='m')stus = StudentModel.objects.filter(name__istartswith='m')# 以n结尾,不区分大小写# stus = StudentModel.objects.filter(name__endswith='n')# stus = StudentModel.objects.filter(name__iendswith='n')print(stus)# 返回return HttpResponse('查询成功!')

 聚合函数

导包  from django.db.models import Max,Avg,Min,Sum,Count 

使用aggregate()函数返回聚合函数的值
        Avg: 平均值
        Count: 数量
        Max: 最大
        Min: 最小
        Sum: 求和

#聚合函数: max,min,sum,avg,count
def get_stu5(request):from django.db.models import Max,Avg,Min,Sum,Count# stus = StudentModel.objects.aggregate(Max('age'))# stus = StudentModel.objects.aggregate(Avg('age'))# stus = StudentModel.objects.aggregate(Sum('age'))# stus = StudentModel.objects.aggregate(Min('age'))stus = StudentModel.objects.aggregate(Count('age'))print(stus)# 返回return HttpResponse('查询成功!')

排序(升序,降序)

升序:order_by('字段名')   默认

降序:order_by('-字段名')

#排序: 升序,降序
def get_stu6(request):#ASC 1个字段stus = StudentModel.objects.all().order_by('age')#ASC 两个字段# stus = StudentModel.objects.all().order_by('age','id')#DESC# stus = StudentModel.objects.all().order_by('-age')print(stus)# 返回return HttpResponse('查询成功!')

 数据表

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/217961.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FPGA UltraScale GTY 全网最细讲解,aurora 8b/10b编解码,HDMI视频传输,提供vivado工程源码和技术支持

目录 1、前言免责声明 2、我这里已有的 GT 高速接口解决方案3、详细设计方案设计框图视频源选择ADV7611解码芯片配置及采集动态彩条视频数据组包UltraScale GTY 全网最细解读UltraScale GTY 基本结构UltraScale GTY 参考时钟的选择和分配UltraScale GTY 发送和接收处理流程Ultr…

Datawhale聪明办法学Python(task2Getting Started)

一、课程基本结构 课程开源地址&#xff1a;课程简介 - 聪明办法学 Python 第二版 章节结构&#xff1a; Chapter 0 安装 InstallationChapter 1 启航 Getting StartedChapter 2 数据类型和操作 Data Types and OperatorsChapter 3 变量与函数 Variables and FunctionsChapte…

微积分-三角函数

三角函数 在处理微积分问题时&#xff0c;我们不可避免的会遇到三角函数。学会三角函数对于微积分是非常重要的。 基本知识 学习三角函数我们需要先学习一些基本知识。 首先要学习的是弧度的概念。弧度是一种角的度量单位&#xff0c;用于测量角的大小。它是根据角所对的弧长…

羊大师解答,羊奶的中医奇妙之处

羊奶素有“润肺之宝”之称&#xff0c;中医学认为它有着独特的作用和价值。羊奶不仅可以滋润肺部&#xff0c;还能保护肺脏免受外界侵害。在中医理论中&#xff0c;肺为人体之“金”&#xff0c;意味着肺具有极其重要的地位。正常肺气血充足&#xff0c;可以维持人体的正常生理…

Linux --绘制地图投影出现报错:无法成功下载地图背景数据

Linux --绘制地图投影出现报错&#xff1a;无法成功下载地图背景数据 主要原因是由于使用学院集群&#xff0c;该集群无法连接外网&#xff0c;在使用cartopy绘制地图投影时&#xff0c;导致无法成功加载地图背景数据解决方法也很简单&#xff0c;自己手动下载所需要的地形数据…

华清远见嵌入式学习——QT——作业4

作业要求&#xff1a; 代码运行效果图&#xff1a; 代码&#xff1a; 头文件&#xff1a; #ifndef ALARMCLOCK_H #define ALARMCLOCK_H#include <QWidget> #include <QTimerEvent> #include <QTimer> #include <QTime> #include <QTextToSpeech&g…

Github仓库远程操作——简单版

Github远程操作 github仓库简单的远程操作&#xff0c;更多复杂的功能请参考github官方文档 标题 Github远程操作添加公钥到githubGithub仓库远程操作 远程操作之前&#xff0c;先添加本地的公钥到github 添加公钥到github 创建本地ssh公私钥&#xff1a;使用powershell或者gi…

静态HTTP应用的未来趋势与展望

随着互联网的快速发展&#xff0c;静态HTTP应用作为一种简单、快速和安全的Web应用形式&#xff0c;已经得到了广泛的应用。然而&#xff0c;随着技术的不断进步和创新&#xff0c;静态HTTP应用也在不断发展和变化。下面&#xff0c;我们就来谈谈静态HTTP应用的未来趋势和展望。…

PHP+MySQL组合开发众筹系统源码:在线支付+消息通知+完整的代码包 附带完整的搭建教程

互联网的普及和发展&#xff0c;众筹作为一种新型的融资方式&#xff0c;逐渐受到越来越多人的关注和认可。众筹系统作为实现众筹业务的核心工具&#xff0c;其开发和应用对于推动众筹行业的发展具有重要意义。罗峰来给大家分享一款基于PHPMySQL组合开发的众筹系统源码&#xf…

软件测试--selenium安装使用

安装selenium不少人使用pip命令来安装selenium&#xff0c;辛辛苦苦安装完之后&#xff0c;还是不能使用。所以我们可以是直接使用编译器&#xff0c;pycharm直接安装selenium扩展包。 file中点击settings 在Settings中点击Project Interpreter,点击加号就可以安装各种需要的扩…

SD卡无法读取怎么办?详细解决方法分享!

“我的sd卡用了很久&#xff0c;但是不知道为什么无法读取了&#xff0c;尝试了很多种方法我都无法读取到里面的数据。我有很重要的文件保存在里面&#xff0c;想问问有什么方法可以帮助我快速解决这个问题吗&#xff1f;” SD卡是一种非常常用的存储设备&#xff0c;可以用于存…

2023 巅峰之作 | AIGC、AGI、GhatGPT、人工智能大语言模型的崛起与挑战

文章目录 01 《ChatGPT 驱动软件开发》内容简介 02 《ChatGPT原理与实战》内容简介 03 《神经网络与深度学习》04 《AIGC重塑教育》内容简介 05 《通用人工智能》目  录 2023年是人工智能大语言模型大爆发的一年&#xff0c;一些概念和英文缩写也在这一年里集中出现&#xff…

leetcode-24-两两交换链表中的节点(C语言实现)

题目&#xff1a; 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4] 输出&…

详细了解云堡垒机的作用,提高企业数据信息安全

随着上云企业的不断增加&#xff0c;云上数据安全性成为企业面临的重要问题。为了保障企业的核心数据安全&#xff0c;越来越多的企业采购了云堡垒机来提升数据安全性。今天我们就来详细了解一下云堡垒机的作用&#xff0c;以及如何提高企业数据安全。 一、云堡垒机定义 云堡垒…

Python从入门到精通八:Python文件操作

文件的编码 思考&#xff1a;计算机只能识别&#xff1a;0和1&#xff0c;那么我们丰富的文本文件是如何被计算机识别&#xff0c;并存储在硬盘中呢&#xff1f; 答案&#xff1a;使用编码技术&#xff08;密码本&#xff09;将内容翻译成0和1存入。 编码技术即&#xff1a;…

Redux Toolkit(RTK)在React tsx中的使用

一个需求: header组建中有一个搜索框,然后这个搜索框在其他页面路由上都可以使用:例如这两个图共用顶部的搜索框; 我之前的做法就是组建传值, 在他们header 组建和 PageA ,B 的父级组件上定一个值,然后顶部变化传到父级组件,在从父级组件传到page组件,有点繁琐,现在说一下利用…

纯干货,activiti入门看这一篇就够了‼️‼️

纯干货&#xff0c;activiti入门看这一篇就够了‼️‼️ 详细讲解了一个activiti流程的从生到死&#xff0c;及每个节点数据库表的变化 文章目录 &#x1f4d5;一、编写流程文件&#x1f5a5;️二、部署流程&#x1f516; 三、启动刚刚部署的流程生成流程实例&#x1f9e3; 四…

SpringCloud系列(二)| Nacos的安装与配置

Nacos是阿里巴巴提供的一个开源的可作为注册中心和配置中心的SpringCloud组件。 Nacos/nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称;一个更易于构 建云原生应用的动态服务发现、配置管理和服务管理平台。 简单来说Nacos有两个核心功能&#xff0c…

大负载工作时电池电压掉落,主控MCU正常工作的保护电路

主要作用是保护系统在大负载时&#xff0c;系统不因此不掉电&#xff0c;导致主控重启. 1 引入电路的原因&#xff1a; 电池供电方案&#xff0c;在中低压时系统大负载这时整个系统的供电会被拉掉落&#xff0c;不同电池的掉落情况不一&#xff0c;但都存在掉落低于主控…

HarmonyOS第一课ArkTS开发语言(TypeScript快速入门)

编程语言介绍 ArkTS是HarmonyOS优选的主力应用开发语言。它在TypeScript&#xff08;简称TS&#xff09;的基础上&#xff0c;匹配ArkUI框架&#xff0c;扩展了声明式UI、状态管理等相应的能力&#xff0c;让开发者以更简洁、更自然的方式开发跨端应用。要了解什么是ArkTS&…