【服务后端】Django的多表数据查询

一、多表查询

有数据表class和ClassUserTemp表

需求是要筛选出某个用户lUser管理的班级下ClassUserTemp的所有数据。

Class表的Owner字段表示关联的管理员用户。

只需要使用__关联属性即可,条件路径就是 班级  --> 班级的管理员  --> 与用户比较

pUserClasses = ClassUserTemp.objects.filter(idClass__Owner=lUser)

二、外键查询

需求改变一下,要查询某个用户在ClassUserTemp的记录,对应的班级

梳理一下,条件路径,ClassUserTemp的该用户的记录idUser=lUser即可。

但返回的Class的objects,此时用ClassUserTemp的外键fkClassUserTemp2Class连接Class和ClassUserTemp表

Class.objects.filter(fkClassUserTemp2Class__idUser=lUser)

附录:

values筛选

一个表返回查询结果,可能只是筛选部分字段给用户,这时候就可以在查询结果集上用values方法

用户表结构部分截图

定义User表可见字段

查询结果集处理如下,值得注意的是 “|”表示合并合集

lUser = User.objects.filter(PhoneNumber=pKey) | User.objects.filter(UserName__contains=pKey)
lUser = lUser.distinct().values(*GlobalVar.TableFields.Userfields)

QuerySet其他字段含义

filter表示=,exclude表示!=。
querySet.distinct() 去重复
__exact 精确等于 like ‘aaa‘
__iexact 精确等于 忽略大小写 ilike ‘aaa‘
__contains 包含 like ‘%aaa%‘
__icontains 包含 忽略大小写 ilike ‘%aaa%‘,但是对于sqlite来说,contains的作用效果等同于icontains。
__gt 大于
__gte 大于等于
__lt 小于
__lte 小于等于
__in 存在于一个list范围内
__startswith 以...开头
__istartswith 以...开头 忽略大小写
__endswith 以...结尾
__iendswith 以...结尾,忽略大小写
__range 在...范围内
__year 日期字段的年份
__month 日期字段的月份
__day 日期字段的日
__isnull=True/False

时间: 2024-10-10 03:42:00

【服务后端】Django的多表数据查询的相关文章

SQL Server 的表数据简单操作(表数据查询)

--表数据查询----数据的基本查询-- --数据简单的查询--select * | 字段名[,字段名2, ...] from 数据表名 [where 条件表达式] 例:use 商品管理数据库goselect * from 商品信息表select 商品编号,商品名称,产地 from 商品信息表selelct * from 商品信息表 where 产地='辽宁沈阳' --关键字辅助查询----1)distinct关键字 (用来消除查询结果中的重复行,使用时紧跟在select命令后)--select

django获取单表数据的三种方式

django获取单表数据的三种方式 v1 = models.Business.objects.all() # QuerySet ,内部元素都是对象 v2 = models.Business.objects.all().values('id','caption') # QuerySet ,内部元素都是字典 v3 = models.Business.objects.all().values_list('id','caption') # QuerySet ,内部元素都是元组 def business(

随便玩玩之PostgreSQL(第二章)单表数据查询

未经授权不得转载 第二章 单表数据查询数据库的基本功能就是数据增查改删,倘若不可以,要她还有什么意义.数据查询功能不仅仅是查询,而且还能筛选,并且格式化显示.数据查询使用SELECT语句,本章介绍如何使用SELECT查询(列出)数据库中的数据. 2.1查询数据库cj表中全部信息方法一:使用"*"通配符查询所有数据(所有字段数据). SELECT * FROM cj; 结果如图. 方法二:制定所有字段(列名).每个字段用逗号(,)隔开. SELECT id,kc,bj,xm,yw,sx,

django前后端分离 form_03(验证,数据查询,代码优化)

1.优化代码 把form验证的返回报错写成一个共用的类 该类在工程下建立了一个uitls-tools.py class FormatErrMsg: @property #装饰器-属性方法 调用的时候不需要加() def error_msg(self): #self.get_json_data() 是form自带的友好的报错提示 返回的是一个字典 message = '' for error_params, v in self.errors.get_json_data().items(): err

MySQL学习总结(五) --- 表数据查询

查询数据记录,是指从数据库对象表中获取所要查询的数据记录,该操作可以说是数据最基本的操作之一,也是使用频率最高.最重要的数据操作. 1.单表数据记录查询 1.1.简单数据查询 SELECT field1,field2,…,fieldn FROM table_name,filed可以是表中所有的字段,也可以是部分字段. SELECT * FROM table_name ,从表中查询所有的数据.*符号可以代替所有的字段,但是这种方式不够灵活,只能按照表中字段的顺序固定进行显示,不能够随便改变字段的显

Oracle锁表数据查询及解决方法

首先:查询数据那些表被锁定1. SELECT l.session_id sid, s.serial#, l.locked_mode,l.oracle_username, l.os_user_name,s.machine, s.terminal, o.object_name, s.logon_time FROM v$locked_object l, all_objects o, v$session s WHERE l.object_id = o.object_id AND l.session_id

django下多表关联查询

实例:1.查询作者的所有完整信息2.查询<21天成为撩妹高手>这本书的作者和姓名3.查询胡大海写了一些什么书4.查询广东人民出版社出版了一些什么书籍5.查询广东人民出版社都有那些作者出过书 多表查询技巧:__:两个下划线可以生成连接查询,查询关联的字段信息 >>> AuthorDetail.objects.values('sex','email','birthday','author__name')[{'author__name': '叶良辰', 'birthday': da

Mysql表数据查询操作

1.简单查询 select * from user; 2.NULL查询 select * from user where hobby is NULL and age is not NULL; 3.in查询 select * from user where age in('22','23','24'); 4.between and查询 select * from user where age between 21 and 55; 5.or查询 select * from user where ag

django orm 关联表查询

django orm 关联表数据,即sql的多表查询 例如两个表: Apply表中定义了字段position为foreignkey指向job表的id字段, 1.通过job表查找子表apply的字段信息: job.objects.values( 'id', 'job_type', 'apply__date_created') 连接符为小写的子表tablename+双下线+子表字段名即:apply__date_created 表示寻找Apply表中的date_created字段 等价于后台的SQL: