Django orm基本crud方法大全!!所有操作只看一篇文章就够了!!
话不多说 直接上方法
这里用到的数据结构为
class something(models.Model):id = models.AutoField(primary_key=True) # id 会自动创建,可以手动写入name = models.CharField(max_length=32) # 名称price = models.DecimalField(max_digits=5, decimal_places=2) # 价格date = models.DateField() # 时间
1.添加数据
1.1 一般方法
实例化对象来保存数据,但是需要使用save才会存入数据
from app01 import models
def add(request):thing = models.something(name="镁铝",price="300",date="2020-9-24") thing.save()return HttpResponse("<p>数据添加成功!</p>")
1.2 ORM(推荐)
通过 ORM 提供的 objects 提供的方法 create 来实现
from app01 import models
def add(request):thing = models.something.objects.create(title="衰哥",price="200",date="2020-9-24") return HttpResponse("<p>数据添加成功!</p>")
2.查询数据
1.1 all() 查询所有数据
使用 all() 方法来查询所有内容。
返回的是 QuerySet 类型数据,类似于 list,里面放的是一个个模型类的对象,可用索引下标取出模型类的对象。
def all(request):thing = models.something.objects.all() print(thing,type(thing)) # QuerySet类型,类似于list,访问 url 时数据显示在命令行窗口中。for i in thing:print(i.name)return HttpResponse("<p>查找成功!</p>")
2.2 filter() 方法用于查询符合条件的数据
返回的是 QuerySet 类型数据,类似于 list,里面放的是满足条件的模型类的对象,可用索引下标取出模型类的对象。
pk=3 的意思是主键 primary key=3,相当于 id=3。
因为 id 在 pycharm 里有特殊含义,是看内存地址的内置函数 id(),因此用 pk。
def filter(request):thing = models.something.objects.filter(pk=3)print(thing)thing = models.something.objects.filter(price=200)for i in thing:print(i.name)return HttpResponse("<p>查找成功!</p>")
2.3 exclude() 方法用于查询不符合条件的数据。
返回的是 QuerySet 类型数据,类似于 list,里面放的是不满足条件的模型类的对象,可用索引下标取出模型类的对象。
def exclude(request):thing = models.something.objects.exclude(pk=3)print(thing)books = models.Book.objects.exclude(price=200)for i in thing:print(i.name)return HttpResponse("<p>查找成功!</p>")
2.4 get()
方法用于查询符合条件的返回模型类的对象符合条件的对象只能为一个,如果符合筛选条件的对象大于一个,或没有一条符合都会报错
def get(request):
##假设有几条数据
##ID=5,PRICE=200
##ID=6,PRICE=200thing = models.something.objects.get(pk=5)thing = models.something.objects.get(pk=18) # 报错,没有符合条件的对象thing = models.something.objects.get(price=200) # 报错,符合条件的对象超过一个for i in thing:print(i.name)return HttpResponse("<p>查找成功!</p>")
2.5 order_by() 方法用于对查询结果进行排序。
返回的是 QuerySet类型数据,类似于list,里面放的是排序后的模型类的对象,可用索引下标取出模型类的对象。
注意:
a、参数的字段名要加引号。
b、降序为在字段前面加个负号 -。
def order_by(request):thing = models.something.objects.order_by("price") # 查询所有,按照价格升序排列 thing = models.something.objects.order_by("-price") # 查询所有,按照价格降序排列return HttpResponse("<p>查找成功!</p>")
2.6 reverse() 方法用于对查询结果进行反转。
返回的是 QuerySe t类型数据,类似于 list,里面放的是反转后的模型类的对象,可用索引下标取出模型类的对象。
def reverse(request):# 按照价格升序排列:降序再反转thing = models.something.objects.order_by("-price").reverse()return HttpResponse("<p>查找成功!</p>")
2.7 count() 方法用于查询数据的数量返回的数据是整数。
def count(request):thing = models.something.objects.count() # 查询所有数据的数量 #高级用法thing = models.something.objects.filter(price=200).count() # 查询符合条件数据的数量return HttpResponse("<p>查找成功!</p>")
2.8 first() 方法返回第一条数据返回的数据是模型类的对象。
def first(request):some = models.something.objects.first() # 返回所有数据的第一条数据return HttpResponse("<p>查找成功!</p>")
2.9 last() 方法返回最后一条数据返回的数据是模型类的对象。
def last(request):some = models.something.objects.last() # 返回所有数据的最后一条数据return HttpResponse("<p>查找成功!</p>")
2.10 exists() 方法用于判断查询的结果 QuerySet 列表里是否有数据。
返回的数据类型是布尔,有为 true,没有为 false。
注意:判断的数据类型只能为 QuerySet 类型数据,不能为整型和模型类的对象。
def exists(request):thing = models.something.objects.exists()# 报错,判断的数据类型只能为QuerySet类型数据,不能为整型thing = models.something.objects.count().exists()# 报错,判断的数据类型只能为QuerySet类型数据,不能为模型类对象thing = models.something.objects.first().exists() return HttpResponse("<p>查找成功!</p>")
2.11 values() 方法用于查询部分字段的数据。
返回的是 QuerySet 类型数据,类似于 list,里面不是模型类的对象,而是一个可迭代的字典序列,字典里的键是字段,值是数据。
注意:
- 参数的字段名要加引号
- 想要字段名和数据用 values
def values(request):# 查询所有的id字段和price字段的数据thing = models.something.objects.values("pk","price")print(thing[0]["price"],type(thing)) # 得到的是第一条记录的price字段的数据return HttpResponse("<p>查找成功!</p>")
2.12 values_list() 方法用于查询部分字段的数据。
返回的是 QuerySet 类型数据,类似于 list,里面不是模型类的对象,而是一个个元组,元组里放的是查询字段对应的数据。
注意:
- 参数的字段名要加引号
- 只想要数据用 values_list
def values_list(request):# 查询所有的price字段和publish字段的数据thing = models.something.objects.values_list("price","publish")print(thing)print(thing[0][0],type(thing)) # 得到的是第一条记录的price字段的数据return HttpResponse("<p>查找成功!</p>")
2.13 distinct() 方法用于对数据进行去重。
返回的是 QuerySet 类型数据。
注意:
- 对模型类的对象去重没有意义,因为每个对象都是一个不一样的存在。
- distinct() 一般是联合 values 或者 values_list 使用。
def distinct(request):# 查询一共有几种价格thing = models.something.objects.values_list("price").distinct() # 对模型类的对象去重没有意义,因为每个对象都是一个不一样的存在。thing = models.something.objects.distinct()return HttpResponse("<p>查找成功!</p>")
2.14 filter() 方法基于双下划线的模糊查询(exclude 同理)。
注意:filter 中运算符号只能使用等于号 = ,不能使用大于号 > ,小于号 < ,等等其他符号,但是有专门的符号来代替,看下面的代码块!!!!!。
注意:为双下划线!!!!
__in 用于读取区间,= 号后面为区间 。
def filter(request):# 查询价格为200或者300的数据books = models.Book.objects.filter(price__in=[200,300])#__gt 大于号 ,= 号后面为数字。# 查询价格大于200的数据 books = models.Book.objects.filter(price__gt=200)#__gte 大于等于,= 号后面为数字。# 查询价格大于等于200的数据 books = models.Book.objects.filter(price__gte=200)#__lt 小于,=号后面为数字。# 查询价格小于300的数据 books=models.Book.objects.filter(price__lt=300)#__lte 小于等于,= 号后面为数字。# 查询价格小于等于300的数据 books=models.Book.objects.filter(price__lte=300)#__range 在 ... 之间,左闭右闭区间,= 号后面为两个元素的区间。books=models.Book.objects.filter(price__range=[200,300])#__contains 包含,= 号后面为字符串。books=models.Book.objects.filter(name__contains="喔喔")#__icontains 不区分大小写的包含,= 号后面为字符串。books=models.Book.objects.filter(name__icontains="python") # 不区分大小写#__startswith 以指定字符开头,= 号后面为字符串。books=models.Book.objects.filter(name__startswith="喔喔")#__endswith 以指定字符结尾,= 号后面为字符串。books=models.Book.objects.filter(name__endswith="喔喔")#__year 是 DateField 数据类型的年份,= 号后面为数字。books=models.Book.objects.filter(date__year=2008)#__month 是DateField 数据类型的月份,= 号后面为数字。books=models.Book.objects.filter(date__month=10)#__day 是DateField 数据类型的天数,= 号后面为数字。books=models.Book.objects.filter(date__day=01) return HttpResponse("<p>查找成功!</p>"
3.删除
3.1 delete() 使用模型类删除
thing=models.something.objects.filter(pk=8).first().delete()
delete() 使用 QuerySet 删除 (推荐)
thing=models.something.objects.filter(pk__in=[1,2]).delete()
4.修改
4.1 通过拿到模型重新赋值再次执行save方法
thing = models.something.objects.filter(pk=7).first()
thing.price = 400
thing.save()
4.2 update 使用QuerySet修改(推荐)
thing = models.something.objects.filter(pk__in=[7,8]).update(price=888)return HttpResponse(thing)
Django orm基本crud方法大全!!所有操作只看一篇文章就够了!!相关推荐
- 查看用友NC的版本方法(不启动NC,只看NCHOME)
查看用友NC的版本方法(不启动NC,只看NCHOME) 在 nchome\ncscript 目录下随便一个模块 文件夹下面 有个 setup.ini文件 里面就有版本信息version 一般 uap模 ...
- delphi if多个条件_【会计职场】老会计带你玩转Excel,IF函数的使用方法大全!小白必看!...
IF函数是工作中最常用的函数之一,所以下面为大家用一篇文章把IF函数的使用方法再梳理一番.看过你会不由感叹:原来IF函数也可以玩的这么高深!快来学习吧. 一. IF函数的使用方法(入门级) 1. 单条 ...
- Python常用基础语法知识点大全合集,看完这一篇文章就够了
介绍 Python 是一门独特的语言,快速浏览一下他的要点: 面向对象:每一个变量都是一个类,有其自己的属性(attribute)与方法(method). 语法块:用缩进(四个空格)而不是分号.花括号 ...
- Django ORM的F Q和extra操作
orm的F功能 假设数据库有一个员工表,表中的年龄都自加"1",这里就需要到orm的F功能,如下面的代码: from django.db.models import F#首先要导入 ...
- django ORM创建数据库方法
1.指定连接pymysql(python3.x) 先配置_init_.py import pymysql pymysql.install_as_MySQLdb() 2.配置连接mysql文件信息 se ...
- 查看某个方法在哪里被调用_一篇文章带你查看并处理Pandas数据
今天我们将一下如何查看Pandas中的各类数据以及对Pandas进行处理的一些方法,通过这些方法我们可以更快的掌握Pandas对数据进行处理: 描述与统计 函数应用 修改列/行索引名称 类型的操作 表 ...
- 高并发必学的 CAS 操作,看这篇就够了!
大家好,我是树哥. CAS 操作是高并发场景下,性能如此之高的一个重要优化.今天推荐胜哥的一篇关于 CAS 的文章,带你了解 CAS 的前世今生,写得真是太棒了! 背景 在高并发的业务场景下,线程安全 ...
- 形位公差符号大全_玩转CAD快捷键(大全),一篇文章就够了
CAD快捷键命令大全 符号键(CTRL开头) CTRL+1 PROPCLOSEOROPEN 对象特性管理器 CTRL+2或4 ADCENTER 设计中心 CTRL+3 CTOOLPALETTES 工具 ...
- 图层重命名快捷键_玩转CAD快捷键(大全),一篇文章就够了
CAD快捷键命令大全 符号键(CTRL开头) CTRL+1 PROPCLOSEOROPEN 对象特性管理器 CTRL+2或4 ADCENTER 设计中心 CTRL+3 CTOOLPALETTES 工具 ...
最新文章
- [转]应届毕业生生存法则--工作篇
- webstrom 中 plugins error 设置里 Languages Frameworks里面没有JavaScript?
- Android无需权限保存文件,即使使用用户权限,也无法在外部存储上保存文件[Android]...
- 扩展方法必须在非泛型静态类中定义
- Android 动画以view中心点旋转动画
- Nginx学习总结(9)——前端跨域问题解决
- MySQL5.7默认打开ONLY_FULL_GROUP_BY模式问题与解决方案
- java读取外部配置文件_SpringBoot读取外部配置文件的方法
- 苹果mac科学计算器:PCalc
- LG30刷小米系统_小米10 Pro 手机 安卓 11 Beta1 线刷包放出,附刷机教程
- c# excel插入图表
- python安装目录插件
- OpenWRT 迅雷远程下载设置
- [TYVJ]选课lzl初一
- Autosar NM
- 计算机网络mooc单元测试答案
- 51nod-1299 监狱逃离(贪心)
- 运动爱好者的专属耳机,轻巧时尚又好用,哈氪无界上手
- 机器学习实战课后习题(八)
- 如何在Win10上安装爬虫框架Scrapy