Django08:模型层(ORM)--测试脚本/必知的13条/神器的双下划线查询/多表操作

单表操作

django 自带的sqlite3数据库对日期格式不是很敏感,处理的时候容易出错。

 

测试脚本

测试环境准备:去manage.py 中拷贝钱四行代码,然后自己手写两行。

脚本无论在引用下面,还是单独开设PY文件都可以。

import os
import sysif __name__ == "__main__":os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysiteday62.settings")#手写2行import djangodjango.setup()#所有代码都必须在下面,包括import命令from app01 import models#不需要迁移命令#增user_obj=models.User(username=username,password=password)User_obj.save() #保存数据#删除   models.Book.objects.filter(pk=2).delete()#pk会自动查找当前表的主键字段#用了PK,不需要查看主键字段名字 uid pid sid...#第二种usr_obj=models.Book.objects.filter(pk=2)usr_obj.delete()#修改#get 不推荐,没有数值会报错edit_book_obj = models.Book.objects.get(pk=edit_id)#推荐models.Book.objects.filter(pk=edit_id).update(book_title=new_title ,publisher=new_publisher_id )

 

必知的13条

1.all()
2.filter() 可以主键用pk替代
3.get() 直接拿数据,但条件不存在会报错。
4.first()
5.last()6.values() #指定获取的数据的字段。返回结果列表套字典res=models.User.objects.values('name','age')7. values_list() #返回列表套元组res.query 查看sql语句方式,只有queryset对象才行8.distinct() 去重复,有主键不能去除,一定要一模一样的数据,一定不要忽略主键9. order_by() 
res=models.User.objects.order_by('age') 默认升序
res=models.User.objects.order_by('-age') #降序 加‘-’10. reverse() 反转,前提是 数据已经排序,跟在order_by()11. count()  #统计个数12. exclude() #排除在外
res=models.User.objects.exclude(name='jason')13. exists()  #是否存在,返回布尔值. 基本用不到,数据包含布尔值。

 

神器的双下划线查询

#查询小于35岁
res=models.User.objects.filter(age__lt=35)#小于等于
res=models.User.objects.filter(age__lte=30)#年龄18,或者32,或者40
res=models.User.objects.filter(age__in=[18,32,40])#18到40岁
res=models.User.objects.filter(age__range=[18,40])#名字还有“n”,默认区分大小写res=models.User.objects.filter(name__contains='n')#忽略大小写
res=models.User.objects.filter(name__icontains='n')#开头,结尾
res=models.User.objects.filter(name__startswith='n')
res=models.User.objects.filter(name__endswith='n')#注册时间2020 1月份
res=models.User.objects.filter(register_time__month='1')
res=models.User.objects.filter(register_time__year'2020')ret = models.Person.objects.filter(birthday__year=2000, birthday__month=5)

 

多表操作

一对多

#增
#1.直接字段 id
models.Books.objects.create(tittle='sanguo',price=123.23,pblicsh_id=1)#2.虚拟字段,对象
publish_obj=models.Publish.objects.filter(pk=2),first()
models.Books.objects.create(tittle='sanguo',price=123.23,pblicsh=publish_obj)#删除,默认级联,删了一个,另外关联表也删除。
models.Publish.objects.filter(pk=1).delete()#修改#1
models.Books.objects.filter(pk=1).update(publish_id=2)#2
publish_obj=models.Publish.objects.filter(pk=2),first()
models.Books.objects.filter(pk=1).update(publish=publish_obj)

多对多

# 多对多 增删改查  就是在操作第三张表#book与authors 多对多#-----增--------
book_obj=models.Book.objects.filter(pk=1).first()
#主键为1的书籍,添加一个主键为1的作者
book_obj.authors.add(1) #因为多对多,可以添加多个。
book_obj.authors.add(2,3) #方法二
author_obj1=models.Author.objects.filter(pk=1),first()
author_obj2=models.Author.objects.filter(pk=2),first()
author_obj3=models.Author.objects.filter(pk=3),first()
book_obj.authors.add(author_obj1,author_obj2,author_obj3) add给第三张表添加数据,可以数字也可以对象。#--------删-----------book_obj.authors.remove(2)
book_obj.authors.remove(1,3)#同样支持对象
book_obj.authors.remove(author_obj1,author_obj2)#------------修改-----------book_obj.authors.set([1,3]) 
book_obj.authors.set([3]) #也支持对象#括号内必须是,可迭代对象。#**先删除,后新增#-------清空----------#在第三张表,清空某个书籍,与作者关系book_obj.authors.clear()
#不需要参数。

 

多表查询

正反向概念

外键字段在book

book->publish 正向

publish->book 反向

口诀:

正向查找靠字段 :

反向查找靠小写   (结果为多个加_set, . 单个不用)

(结果为多个的时候,需要.all())

子查询(基于对象的跨表查询)

#1.查询书籍主键为1的出版社
book_obj=models.Book.objects.filter(pk=1),first()
#正向
res=book_obj.publish
print(res.name)#2. 查询书籍主键为2的作者
book_obj=models.Book.objects.filter(pk=2),first()
#正向
res=book_obj.authors.all() #3. 查询作者jason的电话号码
author_obj=models.Author.objects.filter(name='jason').first()
res=author_obj.author_detail
print(res.phone)什么时候加.all()
结果为多个加.all()#4.查询出版社为东方出版社的书
publish_obj=models.Publis.objects.filter(name='东方出版社').first()
#反向, 表名小写 加_set
res=publish_obj.book_set.all()#5. 查询作者为jason的书
author_obj=models.Author.objects.filter(name='jason')
res=author_obj.book_set.all() 
print(res)#6. 查询手机号为110的作者姓名
author_detail_obj=models.AuthorDetail.objects.filter(phone=110).first()
res=auther_detail_obj.author
print(res.name)#***但结果为单个,就不用_set

 

基于双下划线跨表查询

#1.查询jason的手机号和名字
res=models.Author.objects.filter(name='jason').values('author_detail__phone','name')#反向
res=models.AuthorDetail.objects.filter(author__name='jason').values('phone',author__name)#2. 查询主键为1的出版社名字和书的名字
res=models.Book.objects.filter(pk=1).values('title','publish__name') #表名小写
#反向
res=models.Publish.objects.filter(book__id=1).valus('name','book__title')#3. 查询书籍主键为1的作者姓名
res=models.Book.objects.filter(pk=1).value('authors__name')
res=models.Author.objects.filter(book__id=1),values('name')#4. 书籍主键1的作者的手机号
res=models.Book.objects.filter(pk=1),values('authors__author_detail__phone')

 

 

 

 

 

 

 

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

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

相关文章

“互联网+”促传统企业三大转型

2015年是传统行业互联网化的元年。国家提出要制定“互联网”行动计划后,互联网旅游、互联网汽车、互联网三农、互联网物流、互联网医疗等开始起步。同时,面对不确定的移动互联网时代,互联网某些技术和模式还在进化、演变之中,每一…

开发高性能ASP.NET应用

本文是“.NET Conf China 2022”上我的一个分享,这里更细化的分享出来。分享分为四个部分:制定指示设计应用正确测试性能优化高性能:不一定是架构出来的,但一定是优化出来的。制定指标-收集首先把项目中的热路径API和核心API找出来…

Ethereum-EIPs

What is an EIP? Ethereum Improvement Proposal 以太坊改进建议的文档 这个文档向Ethereum社区提供信息,为Ethereum、Ethereum的进程、环境描述一个新特征,该EIP应当为该特征提供一个基本的技术描述和原理原理。该EIP作者有责任在社区和不同意见的文档…

Django08-1:模型层(ORM)--聚合查询/分组查询/F与Q查询/开启事务/常用字段及参数/自定义字段/数据库查询优化

聚合查询 单独使用时,用aggregate 1.只要是跟数据库相关的模块 基本都在django.db.models里面 如果没有应该在django.db里面 2. 聚合查询通常配合分组使用 from django.db.models import Avg, Sum, Max, Min, Count# 1.所有书的平均价格 resmodels.Book.objects.…

记事本状态栏不会自动_如何在记事本中同时启用状态栏和自动换行

记事本状态栏不会自动The status bar in Windows’ Notepad displays the current line number and column number of the cursor location. However, if you find that the Status Bar option on the View menu is grayed out, it may be because you have Word Wrap enabled…

洛谷P2587 [ZJOI2008] 泡泡堂

题目传送门 分析:一道策略游戏题,要求最大期望得分和最小期望得分。首先分析最大,很显然是可以用一种类似于田忌赛马的思维来做,将两队的实力按照从大到小(其实从小到大也可以)排序,然后就按照顺…

极端高温导致澳大利亚断网

西澳大利亚首府珀斯因恶劣天气出现了网络连接问题, 网络故障不是由于暴风雨或闪电引起的,而是极端高温。本周一是珀斯有记录以来第六热的天,当天最高温度达到了44.4℃。因为创纪录的高温,澳大利亚宽带 服务商iiNet在当…

推荐一款采用 .NET 编写的 反编译到源码工具 Reko

今天给大家介绍的是一款名叫Reko的开源反编译工具,该工具采用C#开发,广大研究人员可利用Reko来对机器码进行反编译处理。我们知道.NET 7 有了NativeAOT 的支持,采用NativeAOT 编译的.NET程序 无法通过ILSpy 之类的传统工具得到源码&#xff0…

并行传输数据和串行传输数据_为什么串行数据传输比并行数据传输快?

并行传输数据和串行传输数据SATA hard drive connections are faster than older PATA hard drive connections and the same can be said for external cabling standards, but this is counter-intuitive: why wouldn’t the parallel transmission be faster? SATA硬盘驱动…

得到某月的天数

Calendar timeCalendar.getInstance(); time.clear(); time.set(Calendar.YEAR,2018);//year年 time.set(Calendar.MONTH,1);//Calendar对象默认一月为0,month月 int daytime.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数 System.out.pri…

Django09:图书管理系统笔记/choices用法/ MTV与MVC模型/多对多三种创建方式

图书管理系统笔记 redirect括号内可以直接写url 也可以直接写别名 但如果别名需要参数,必须使用reverse解析。 choices用法 使用场景:能列举完全的数据 #使用方法:xxx_choice #1. get.xxx_display #2. 如果超出范围,则显示原…

业务处理速度变慢?且看IT如何成为救世主

在日常生活的方方面面,我们似乎都在期待着一种即时的便利。比如,用手机购物、订餐、缴费、预约挂号等等。而在企业中,时间与效率可不是一种休闲福利,而是一项重要的商业功能。我们有理由期待,当今史无前例的数字革命正…

微软让卡塔尔世界杯踏入元宇宙

遵守前一篇公众号文章里的承诺,昨天盆盆在视频号里录制了一段5分钟左右的短视频,讲了江森自控和微软Azure,如何帮助卡塔尔世界杯打造基于元宇宙的数字体育馆。Part.1欢迎扫码关注我的视频号(每天更新元宇宙、云计算和数字化的短视频)。Part.2…

洛谷——P1305 新二叉树(新建二叉树以及遍历)

题目描述输入一串二叉树,用遍历前序打出。 输入输出格式输入格式: 第一行为二叉树的节点数n。(n \leq 26n≤26) 后面n行,每一个字母为节点,后两个字母分别为其左右儿子。 空节点用*表示 输出格式: 前序排列的二叉树 输…

插槽1单通道插槽2双通道_相机双存储卡插槽有什么大不了的?

插槽1单通道插槽2双通道If you paid any attention to the launch of Canon and Nikon’s first full frame mirrorless cameras—the EOS R, Z6, and Z7— you’d have noticed that some people were pretty unhappy that they only came with a single card slot—an SD slo…

python 垃圾回收详解

原文:https://zhuanlan.zhihu.com/p/31150408 总纲策略和垃圾回收系统工作内容引用计数详解标记-清除分代收集循环引用编程应用-常见方法ex 过程详解使用建议触发机制参考文献Python垃圾回收机制--完美讲解(Python vs Ruby)Python垃圾回收机制…

Django10:Ajax介绍/发送数据/SweetAlert

Ajax 异步提交 局部刷新 发送方式 1. 浏览器输入url,按enter get 2.a标签href属性 get 3.form表单 get/post 4. ajax get/post ajax 不是编程语言&#xf…

物联网数据终端演进之道

智能手机的普及在最近几年掀起了一股取代企业数据终端的风潮,但正如笔者在一年前便提到过 的,“智能手机难以在企业级应用中得以普及”,这种观点最好的佐证便是时至今日,由于安全性与管理合规的需要,个人计算机用于企业…

mac 不能连接wi-fi_如何阻止Mac自动连接到Wi-Fi网络

mac 不能连接wi-fiYour Mac automatically reconnects to Wi-Fi networks you’ve previously connected to. Starting with macOS High Sierra, you can now tell your Mac not to automatically connect to certain Wi-FI networks. Your Mac will remember the Wi-Fi networ…

“玩转课堂”基本构想

1、项目背景随着互联网科技的高速发展,人们的生活、学习和工作中的许多事情都可以借助互联网来完成,并且反响良好。作为学生,我们切身体会到,能够使用网络平台来进行学习可以节约时间、并且十分方便;而在老师的角度&am…