单表操作

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')

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

  1. django之七(模型层ORM相关)

    ORM字段 常见字段 1.CharField(max_length,verbose_name=)) 2.AutoField(primary_key)BigAutoField(AutoField)- b ...

  2. Django–模型层orm查询

    文章目录 Django–模型层orm查询 一.单表查询(增.删.改.查) 基本查询 下划线查询 二.外键字段(增.删.改.查) 一对多 多对多 三.多表查询 多表查询的方式 正反向的概念 基于对象的跨 ...

  3. $Django 多表操作(增删改查,基于双下划线,对象的查询) 在Python脚本中调用Django环境...

    0在Python脚本中调用Django环境. import osif __name__ == '__main__': os.environ.setdefault("DJANGO_SETTIN ...

  4. 测试人员必知的软件测试文档有哪些?

    测试人员必知的软件测试文档有哪些? 软件测试文档一般是提供测试信息的一组文档,可以是测试人员的工具,也可以是项目开发团队的开发辅助工具. 一般情况下,项目相关的测试文档主要有以下几个 : 1.测试计划 ...

  5. 管理95后员工,管理者必知的4条底层逻辑

    95后员工普通受教育程度更高,需要的是尊重,相信的是平等,更看重价值观,追求自我实现. 这些特征决定了过去的管理手段在新生代员工身上不再适用了.在这个新时代,如何管理好95后员工? 你要能给出清晰明确 ...

  6. 作为一个渗透测试学习者必知必读的好书推荐

    0x00 前言 至于书籍推荐这个话题,很多前辈都回答过了,但还是有很多刚入门的小伙伴还是一言不合就问该看书籍,作为一个搞Web安全的菜鸟忠恳告诉你,你第一本该看的书是<提问的智慧>,附上一 ...

  7. day55 django 模型层,orm连表操作

    设计表 django之orm详解: https://www.cnblogs.com/komorebi/p/11551089.html 在django中设计表 1.先在navicat中建好一个库 2.更 ...

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

    聚合查询 单独使用时,用aggregate 1.只要是跟数据库相关的模块 基本都在django.db.models里面 如果没有应该在django.db里面 2. 聚合查询通常配合分组使用 from ...

  9. 什么是API测试?开发必知的8种API自动化测试类型

    API测试 API自动化测试在产品质量控制和CI/CD流程检测中扮演着非常重要的角色.与GUI测试不同,API测试可以更灵活应地适应发布周期短和频繁变更的需求或产品,而且也不会破坏测试输出结果. 什么 ...

最新文章

  1. 用随机游动生成时间序列的合成数据
  2. 作为前端,你不得不知道的SEO
  3. 【今晚七点】:对话余世兵——从OnVideo到快手云剪
  4. 软件套装 推荐书籍-海洋工程类
  5. 谈谈如何在面试中发掘程序猿的核心竞争力 什么是程序员的核心竞争力?
  6. c#如何生成Excel(.xls和.xlsx)文件
  7. python isodd()判断奇偶_EXCEL VBA:Iseven Isodd 判断奇偶
  8. 百度文库f12免费复制文章
  9. 坦克大战小游戏的实现
  10. 正点原子Linux开发板实现WiFi开机自动连接
  11. php展厅控制系统,展厅中控系统
  12. 移动APP测试经验总结
  13. 虚拟空间windows和linux,虚拟主机选windows还是linux
  14. 机器学习科普文章:“一文读懂机器学习,大数据/自然语言处理/算法全有了”
  15. 初步认识地图布局和指北针 - SuperMap iDesktop 8C
  16. freescale R10 ipu lib 分析 - ipu_param_mem.h
  17. linux c语言 select函数用法
  18. 2022-2028全球食品级柠檬酸镁行业调研及趋势分析报告
  19. 计算机运行慢 卡是什么原因是什么原因,电脑很卡是什么原因
  20. 销售ERP软件系统主要包括哪些功能?

热门文章

  1. 在SD/MMC卡中可读写的FAT文件系统
  2. hdu 2896 病毒侵袭
  3. 归档日志 delete input 和delete all input 区别
  4. 打独立运行包遇到无法trim咋解决
  5. Windows 11 小技巧- WSL开启Linux桌面应用
  6. 集成开放平台标准化连接器之基于OAS3.0的API管理能力
  7. out参数不用赋值?这么神奇吗!
  8. 如何在 Web Forms 中引入依赖注入机制
  9. Entity Framework Core 5中实现批量更新、删除
  10. 楼继伟:现有5G技术很不成熟