django单表查询

必知必会13条

1.all() 查询所有 QuerySet

res=models.Book.objects.all()#惰性查询
print(res)
for i in res:
print(i.title)

2.filter() 查询指定范围 QuerySet

res=models.Book.objects.filter(pk=3)
print(res)

3.get() 查询单个对象,若有多个数据会报错,不建议使用

res=models.Book.objects.get(pk=2)
print(res.title)

4.first() 拿第一个

res=models.Book.objects.filter(pk=2).first()
print(res)

5.last() 拿最后一个

res=models.Book.objects.filter(pk=1).last()
print(res)

6.exclude() 除此之外 QuerySet

res = models.Book.objects.exclude(pk=3).filter(pk=4).filter(pk=4)
print(res)

7.values() 查出所有的title以列表套字典形式 QuerySet

res=models.Book.objects.values('title')
print(res)
for r in res:
print(r.get('title'))

8.values_list() QuerySet 同上列表套元组

res = models.Book.objects.values_list('title')
print(res)

9.count() 统计个数

res=models=Book.objects.all().count()
print(res)

10.distinct() 去重(必须是数据全一样才能去重,包括主键)

res=models.Book.objects.all().distinct()
res1=models.Book.objects.values('title').distinct()
print(res,res1)

11.order_by() 排序默认升序

res=models.Book.objects.order_by('price')
#res=models.Book.objects.order_by('-price')#倒序的一种方式
print(res)

12.reverse() 必须是已经排序好的才可以反转

res=models.Book.objects.order_by('price').reverse()
print(res)

13.exists() 是否为空,返回布尔值

res=modles.Book.objects.all().exists()
print(res)

双下划线查询来咯

查询价格大于200的书籍

res=models.Book.objects.filter(price__gt=200)

查询价格小于200的书籍

res = models.Book.objects.filter(price__lt=200)

查询价格大于或者等于200的书籍

res = models.Book.objects.filter(price__gte=200)

价格是200或者123.23或者666.66的

res = models.Book.objects.filter(price__in=[200,123.23,666.66])

价格在200到700之间的

res = models.Book.objects.filter(price__range=(200,700))

模糊匹配

like % _

查询书籍名称中包含p的

res =models.Book.objects.filter(title__contains='p')#区分大小写
res =models.Book.objects.filter(title__icontains='p')#不分大小写

查询以三开头的书籍

res = models.Book.objects.filter(title__startswith='三')
res1 = models.Book.objects.filter(title__endswith='P')
print(res1)

查询某年某月的书籍

res = models.Book.objects.filter(publish_date__year='2019')
res = models.Book.objects.filter(publish_date__month='10')

多表操作

一对多增删改查

#传publish_id时传id值
models.Book.objects.create(title='三国演义',price=123.23,publish_id=1)
#若传publish则传publish对象
publish_obj=models.Book.objects.filter(pk=1).first()
models.Book.objects.create(title='三国演义',price=123.23,publish=publish_obj)

book_obj = models.Book.objects.filter(pk=1).first()
print(book_obj.publish) # 获取到当前所对应的出版社对象
print(book_obj.publish_id) # 获取到的就是表中的实际字段

models.Book.objects.filter(pk=1).update(publish_id=3)
publish_obj = models.Publish.objects.filter(pk=2).first()
models.Book.objects.filter(pk=1).update(publish=publish_obj)

models.Publish.objects.filter(pk=2).delete()
默认也是级联更新 级联删除

多对多增删改查(操作的都是第三张表)

增add

book_obj=models.Book.objects.filter(pk=3).first()
print(book_obj.authors)
book_obj.authors.add(1,2) author_obj = models.Author.objects.filter(pk=1).first()
author_obj1 = models.Author.objects.filter(pk=2).first()
# book_obj.authors.add(author_obj)
book_obj.authors.add(author_obj,author_obj1)
"""
add() 括号内既可以传数字也可以传数据对象
并且都支持传多个
"""

改set

book_obj = models.Book.objects.filter(pk=3).first()
# book_obj.authors.set([3,])
# book_obj.authors.set([1,3])
author_obj = models.Author.objects.filter(pk=1).first()
author_obj1 = models.Author.objects.filter(pk=2).first()
book_obj.authors.set((author_obj,))
book_obj.authors.set((author_obj,author_obj1))
"""
set() 括号内 既可以传数字也传对象
并且也是支持传多个的
但是需要注意 括号内必须是一个可迭代对象
"""

删remover

book_obj = models.Book.objects.filter(pk=3).first()
# book_obj.authors.remove(2)
# book_obj.authors.remove(1,2) author_obj = models.Author.objects.filter(pk=1).first()
author_obj1 = models.Author.objects.filter(pk=2).first()
# book_obj.authors.remove(author_obj)
book_obj.authors.remove(author_obj,author_obj1)
"""
remove() 括号内 既可以传数字也传对象
并且也是支持传多个的
"""

清空clear

book_obj = models.Book.objects.filter(pk=3).first()
book_obj.authors.clear()
"""clear()括号内不需要传任何参数 直接清空当前书籍对象所有的记录"""

跨表查询

"""
ORM跨表查询
1.子查询
2.连表查询 正反向的概念
外键字段在谁那儿 由谁查谁就是正向 谁手里有外键字段 谁就是正向查
没有外键字段的就是反向
书籍对象 查 出版社 外键字段在书籍 正向查询
出版社 查 书籍 外键字段在书籍 反向查询 正向查询按字段
反向查询按表名小写 ... """
"""
# 1.基于对象的跨表查询 子查询
# 1.查询书籍是python入门的出版社名称
book_obj = models.Book.objects.filter(title='python入门').first()
# 正向查询按字段
print(book_obj.publish.name)
print(book_obj.publish.addr)
# 2.查询书籍主键是6的作者姓名
book_obj = models.Book.objects.filter(pk=6).first()
# print(book_obj.authors) # app01.Author.None
print(book_obj.authors.all())
# 3.查询作者是jason的手机号
author_obj = models.Author.objects.filter(name='jason').first()
print(author_obj.author_detail.phone)
print(author_obj.author_detail.addr)
"""
正向查询 按字段
当该字段所对应的数据有多个的时候 需要加.all()
否者点外键字段直接就能够拿到数据对象
"""
# 4.查询出版社是东方出版社出版过的书籍
publish_obj = models.Publish.objects.filter(name='东方出版社').first()
# print(publish_obj.book_set) # app01.Book.None
print(publish_obj.book_set.all())
# 5.查询作者是jason写过的所有的书
author_obj = models.Author.objects.filter(name='jason').first()
# print(author_obj.book_set) # app01.Book.None
print(author_obj.book_set.all())
# 6.查询手机号是110的作者
author_detail_obj = models.AuthorDetail.objects.filter(phone=110).first()
print(author_detail_obj.author)
print(author_detail_obj.author.name)
print(author_detail_obj.author.age)
"""
反向查询按表名小写
什么时候需要加_set
当查询的结果可以是多个的情况下 需要加_set.all()
什么时候不需要加_set
当查询的结果有且只有一个的情况下 不需要加任何东西 直接表名小写即可
"""
# 7.查询书籍是python入门的作者的手机号
book_obj = models.Book.objects.filter(title='python入门').first()
print(book_obj.authors.all())

django初步了解4的更多相关文章

  1. django初步了解2

    目录 django初步了解2 表的字段增删改查 数据的增删改查 反向解析和分组 路由分发 名称空间 伪静态 虚拟环境 django初步了解2 表的字段增删改查 新增的字段 1.直接提供默认值 defa ...

  2. django初步了解

    目录 学前了解 wsgiref模块( web服务网关接口) 根据不同的功能拆封成不同的py文件 动静态网页 HTTP协议 django初步了解1 1.小白必会三板斧 2.静态文件配置 3.reques ...

  3. Django初步(一):安装和简单演示

    参考:Windows下安装Django:http://www.th7.cn/Program/Python/201305/136301.shtml

  4. django初步了解3

    目录 JsonResponse模块 form表单上传文件 FBV与CBV django settings源码分析及实际应用 模板语法 模板传值 模板过滤器 标签 if标签 for标签 with标签 自 ...

  5. Django初步完成:登录、注册、退出

    python环境:python2.7 开发工具:pycharm 项目名称:mysite5 app名称:online settings:映射app路径 INSTALLED_APPS = [ 'djang ...

  6. django初步--+urls解析

    1.静态文件配置: 你在浏览器中输入网址能够有响应的资源返回给你 是因为后端已经提前给你开设该资源的接口,也就意味着你所能 访问到的资源 都是人家事先定义好的. 2.django如何给用户开设资源接口 ...

  7. django初步了解(一)

    安装django pip3 install django==版本号 创建一个djangp项目 django-admin startproject 项目名 目录介绍: 运行django项目: pytho ...

  8. Django初步皮毛

    Django是一个用python编写的Web框架. #Django安装 pip install Django 然后是配置环境变量,将这目录添加到系统环境变量中: C:\Python33\Lib\sit ...

  9. Django初识

    web框架 Web应用框架有助于减轻网页开发时共通性活动的工作负荷,例如许多框架提供数据库访问接口.标准样板以及会话管理等,可提升代码的可再用性.简单地说,就是你用别人搭建好的舞台来做表演,用别人做好 ...

随机推荐

  1. NUnit -- Test discovery or execution might not work for this project

    [7/31/2019 2:06:58.100 PM Warning] No test matches the given testcase filter `FullyQualifiedName=Sil ...

  2. 解决WAMP Server与IIS端口冲突问题

    版本前提: 腾讯云服务器 windows server 2012 R2 WampServer3.10  64bit 有两种思路 一.修改wamp端口 文件位置   C:\wamp64\bin\apac ...

  3. WPF学习笔记 - 如何用WPF创建单实例应用程序

    使用一个已命名的(操作系统范围的)互斥量. bool mutexIsNew; using(System.Threading.Mutex m = new System.Threading.Mulex(t ...

  4. 小D课堂 - 新版本微服务springcloud+Docker教程_3-07 Eureka服务注册中心配置控制台问题处理

    笔记 7.Eureka服务注册中心配置控制台问题处理     简介:讲解服务注册中心管理后台,(后续还会细讲) 问题:eureka管理后台出现一串红色字体:是警告,说明有服务上线率低 EMERGENC ...

  5. 一百一十三:CMS系统之前台注册界面

    html {% from 'common/_macros.html' import static %}<!DOCTYPE html><html lang="en" ...

  6. File Zilla连接Ubuntu 失败

    一.SFTP方式连接失败 站点配置 连接失败 二.FTP连接方式失败 站点配置 连接失败

  7. JAVA 基础编程练习题6 【程序 6 求最大公约数及最小公倍数】

    6 [程序 6 求最大公约数及最小公倍数] 题目:输入两个正整数 m 和 n,求其最大公约数和最小公倍数. 程序分析:利用辗除法. package cskaoyan; public class csk ...

  8. Django之contenttypes组件

    目录 一. 介绍 二. 应用场景 1. 表结构设计的演变 2. GenericForeignKey和GenericRelation 3. 测试 一. 介绍 Django包含一个contenttypes ...

  9. 前台请求响应json

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  10. 从零探索Java网络编程01之 TCP/IP 与 Socket

    最近完成了几项比较简单的项目, 终于是在996里偷了点闲暇时光, 想着来研究研究些啥吧?  一个普通的控制台日志映入了我的眼帘(孽缘呀): (图中使用 SpringBoot 的 log4j 来输出日志 ...