django的models表查询

  一、单表查询

(1) all():                 查询所有结果    # 返回的QuerySet类型

(2) filter(**kwargs):      它包含了与所给筛选条件相匹配的对象   #返回的QuerySet类型

(3) get(**kwargs):         返回与所给筛选条件相匹配的对象,返回结果有且只有一个,  #返回的models对象
如果符合筛选条件的对象超过一个或者没有都会抛出错误。 (4) exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象 #返回的QuerySet类型 (5) values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列 #返回的QuerySet类型
model的实例化对象,而是一个可迭代的字典序列 (6) values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列 #返回的QuerySet类型 (7) order_by(*field): 对查询结果排序 (8) reverse(): 对查询结果反向排序 (9) distinct(): 从返回结果中剔除重复纪录 (10) count(): 返回数据库中匹配查询(QuerySet)的对象数量。 (11) first(): 返回第一条记录 #返回的models对象
(12) last(): 返回最后一条记录 #返回的models对象
(13) exists(): 如果QuerySet包含数据,就返回True,否则返回False

  二、双下划线查询

(1)models.Tb1.objects.filter(id__lt=10, id__gt=1)   # 获取id大于1 且 小于10的值

(2)models.Tb1.objects.filter(id__in=[11, 22, 33])   # 获取id等于11、22、33的数据
(3)models.Tb1.objects.exclude(id__in=[11, 22, 33]) # not in
  
(4)models.Tb1.objects.filter(name__contains="ven") #字段包含指定值的
(5)models.Tb1.objects.filter(name__icontains="ven") # icontains大小写不敏感  

(6)models.Tb1.objects.filter(id__range=[1, 2])     # 范围bettwen and  

(7)还有startswith,istartswith, endswith, iendswith之类

  三、跨表查询

  1、表结构

class Something(models.Model):
name = models.CharField(max_length=32) class UserType(models.Model):
caption = models.CharField(max_length=32)
s = models.ForeignKey('Something',on_delete=models.CASCADE) class UserInfo(models.Model):
  user = models.CharField(max_length=32)
  pwd = models.CharField(max_length=32)
  user_type = models.ForeignKey('UserType') # user_type_id

  2、查询

userinfo_obj = UserInfo.objects.all()

  查询到的是里面包含多个UserInfo对象,取第一个UserInfo对象则

userinfo_obj[0]

  取第一个对象的值则为

id = userinfo_obj[0].user.id
user = userinfo_obj[0].user.user
pwd = userinfo_obj[0].user.pwd

  3、一对多操作

  创建数据一步到位

UserInfo.objects.create(user='abj','pwd'='',user_type_id=3)

  4、反向查询

  反向查询其他表的数据双下划线__很重要!如查询‘普通用户’用user_type__caption即可

q = UserInfo.objcets.filter(user_type__caption='普通用户')

Django开发之路 二(django的models表查询)的更多相关文章

  1. 六、Django学习之基于下划线的跨表查询

    六.Django学习之基于下划线的跨表查询 一对一 正向查询的例子为 已知用户名,查询用户的电话号码.反向查询例子反之. 正向查询 其中下划线前的表示表名,无下划线的表示的是Author表 resul ...

  2. FreeSql (二十)多表查询 WhereCascade

    WhereCascade 多表查询时非常方便,有了它可以很轻松的完成类型软删除,租户条件的功能. IFreeSql fsql = new FreeSql.FreeSqlBuilder() .UseCo ...

  3. Django开发之路 一(django安装并测试运行)

    安装Django与测试 1.虚拟环境的安装 一般来说Django的开发最好是在虚拟环境上进行,这样的好处是可以将不同的Django的项目的环境分割开来,相互不影响.比如说项目一用到Python2.x和 ...

  4. Django 学习笔记(二) 《models》

    python 2.7.6 Django1.8.3 IDE eclipse+pydev Django开发的模式就是MTV(c)模式(model. template, view(urls)). 对于mod ...

  5. Django开发:(1)django基础 & url控制器

    HTTP请求协议 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网(WWW:World Wide Web )服务器与本地浏览器之间传输超文本 ...

  6. Android流媒体开发之路二:NDK开发Android端RTMP直播推流程序

    NDK开发Android端RTMP直播推流程序 经过一番折腾,成功把RTMP直播推流代码,通过NDK交叉编译的方式,移植到了Android下,从而实现了Android端采集摄像头和麦克缝数据,然后进行 ...

  7. django orm 基于双下划线的跨表查询

    一..基于双下划线的跨表查询(join实现) key:正向查询按字段,反向查询按表明小写 1.一对多跨表查询 查询在跨表中可以有两种方式,正向查询就是关键字段在你要搜索的表,没有关键字段就是反向查询 ...

  8. Django开发网站(二)

    第一课:视图显示 1   建立一个项目:django-admin startproject blog, 进入blog: cd blog 显示:blog(__init__.py settings.py ...

  9. IOS开发之路二十一(UIWebView加载本地html)

    挺简单不多说的直接代码: // // ViewController.h // JSAndJson // // Created by WildCat on 13-9-8. // Copyright (c ...

随机推荐

  1. 前端swiper使用指南

    swiper 在网页中常用的方法 1.使用时在页面引入 <link rel="stylesheet" href="front/css/swiper.min.css& ...

  2. img-responsive class图片响应式

    在BootStrap中,给<img>添加 .img-responsive样式就可以实现图片响应式. 1 <img src="..." class="im ...

  3. Ubuntu终端命令行缩短显示路径

    平时我们使用linux终端命令行的时候,常常会被一个问题困扰,那就是文件路径过长, 有时候甚至超过了一行,这样看起来非常别扭,其实只要两步就可以解决这个问题: 1,修改.bashrc文件(用户根目录下 ...

  4. 从U盘安装CentOS7.3教程(转载)

    0.准备工作: 一台没系统的普通电脑u盘一个(大于1G,最小安装的话不超过1G,根据选择系统大小匹配U盘即可) CentOS7.3 iso文件一个UltraISO工具 1.制作U盘 ①使用UltraI ...

  5. hibernate简单集合映射和获取

    简单集合映射(可以直接获取) // javabean设计 public class User { private int userId; private String userName; // 一个用 ...

  6. 路飞学城Python-Day151

    sprapy框架能够在pycharm中调试的方式 需要在配置文件中加上一个文件,文件的内容为 start.py #!/usr/bin/env python # -*- coding:utf-8 -*- ...

  7. Vue双向绑定

    vue的双向数据绑定的原理相信大家都十分了解:主要是通过ES5的Object对象的defineProperty属性:重写data的set和get函数来实现的. 该方法允许精确的添加或者修改对象的属性: ...

  8. 基于fullpage的自动播放,手动播放,暂停页面的功能

    功能如下: 1.默认加载方式为“自动播放 ”方式,即从第1屏至第5屏 页面循环加载显示,每屏每次仅显示1个页面,页面间停留时间为“10”秒2.手动播放过程中,按数字键“1”-“5”,将直接切到指定页面 ...

  9. 浅谈[^>]在正则中的2种用法

    /^A/会匹配"An e"中的A,但是不会匹配"ab A"中的A,此时^A的意思是“匹配开头的A” /[^a-z\s]/会匹配"my 3 sister ...

  10. 批量修改Linux系统密码

    截取主机IP地址最后一位数.匹配一组定义好的自定义密码.使用chpasswd修改主机账户密码 截图主机IP [root@web01 ~]# ip addr 1: lo: <LOOPBACK,UP ...