ORM 操作 必知必会13条

import os
# if __name__ == '__main__': # 当前文件下执行
os.environ.setdefault('DJANGO_SETTINGS_MODULE','orm_p.settings')
import django
django.setup() # 初始设置 脚本 加载了Django环境 from app01 import models
ret = models.Person.objects.all() # QuerySet all 所有
ret = models.Person.objects.get(pk=101) # 获取不到或者多个就报错 获取某一条数据 对象
ret = models.Person.objects.filter(name = 'alex') # QuerySet 对象列表 满足条件
ret = models.Person.objects.exclude(name = 'alex')# 满足条件后取反--反选 对象列表
ret = models.Person.objects.values() # QuerySet 获取数据所有字段的值 不再是对象,变成字典
ret = models.Person.objects.filter(name = 'alex').values() # QuerySet 获取条件数据所有字段的值 不再是对象,变成字典
ret = models.Person.objects.filter(name = 'alex').values('pid','name') # QuerySet 获取条件数据所有字段的值 不再是对象,变成字典
# 不指定字段显示所有,指定字段显示选择内容 { 值 值}
ret = models.Person.objects.filter(name = 'alex').values_list() # QuerySet 获取条件数据所有字段的值 不再是对象,变成字典
# 获取字段的值 元组 ( 值 值 ) --> 传字段 ret = models.Person.objects.all().order_by('-pid','age') # 升序 -pid 降序 左优先 多个字段排序 ret =ret.reverse() # 排好序的 后面反转的 ret = models.Person.objects.all() # 这个用reverse 没效果 models.py 中 class Meta: ordering = ('pid') ret = models.Person.objects.all().distinct() # distinct() 去重 mysql不支持按字段去重
ret = models.Person.objects.values('name').distinct() # distinct() 去重 ret = models.Person.objects.count() # 计数
ret = models.Person.objects.filter(pid=122).first() # 第一个 查不到/不报错/返回None
ret = models.Person.objects.all().last() # 取最后一个
ret = models.Person.objects.filter(pid=100).exists() # 查存在不 返回True/Flase
总结:
返回queryset的有
all() , filter() , exclude() , order_by() , reverse() , distinct() 特殊的queryset的有
values() values_list() 返回数字的:
count() 返回具体对象的
get() first() last() 返回布尔值的
exists()

单表的双下划线方法

import os

os.environ.setdefault('DJANGO_SETTINGS_MODULE','orm_p.settings')
import django
django.setup() # 初始化 # 单表查询
from app01 import models ret = models.Person.objects.filter(pk__gt=100) # greater than 大于
ret = models.Person.objects.filter(pk__lt=100) # less than 小于
ret = models.Person.objects.filter(pk__gte=100) # greater than equal 大于等于
ret = models.Person.objects.filter(pk__lte=100) #小于等于
ret = models.Person.objects.filter(pk__in=[100,103]) #查几个
ret = models.Person.objects.exclude(pk__in=[100,103]) #原生sql 中的 not in

ret = models.Person.objects.filter(pk__lte=103,pk__gte=100) # 大于等于 -- 小于等于
ret = models.Person.objects.filter(pk__range=[100,103])     # 什么范围
ret = models.Person.objects.filter(name__contains = 'l') # 原生sql中的 like 包含
ret = models.Person.objects.filter(name__icontains = 'L') # 大小写 不敏感
ret = models.Person.objects.filter(name__startswith = 'x') # 开头
ret = models.Person.objects.filter(name__istartswith = 'X') # 不敏感处理
ret = models.Person.objects.filter(name__endswith = 'X') # 以什么结束 ret = models.Person.objects.filter(name__iendswith = 'X') # 不敏感处理
ret = models.Person.objects.filter(birth__year='2019') #条件查询
ret = models.Person.objects.filter(birth__month='01') # 查不到
ret = models.Person.objects.filter(birth__contains='2019-01-24') # 能查了
ret = models.Person.objects.filter(age__isnull=True) # 是否为空

外键查询

正向查找

对象查找(跨表)
语法:对象.关联字段.字段
book_obj = models.Book.objects.first() # 第一本书对象
print(book_obj.publisher) # 得到这本书关联的出版社对象
print(book_obj.publisher.name) # 得到出版社对象的名称 字段查找(跨表)
语法: 关联字段__字段
print(models.Book.objects.values_list("publisher__name"))
------------------------------------------------------------------
反向查找 对象查找
语法:obj.表名_set
publisher_obj = models.Publisher.objects.first() # 找到第一个出版社对象
books = publisher_obj.book_set.all() # 找到第一个出版社出版的所有书
titles = books.values_list("title") # 找到第一个出版社出版的所有书的书名 字段查找
语法:表名__字段
titles = models.Publisher.objects.values_list("book__title")

ManyToManyField

Django ORM 操作 必知必会13条 单表查询的更多相关文章

  1. 65、django之模型层(model)--添加、单表查询、修改基础

    上篇带大家简单做了一下图书表的创建.简单的查看和删除,今天会先简单介绍添加和修改,因为添加和修改与删除一样都很简单,本篇会相对多介绍一点单表查询,大家都知道数据库中查询是最重要的一部分,毕竟无论是修改 ...

  2. django之模型层(model)--添加、单表查询、修改基础

    上篇带大家简单做了一下图书表的创建.简单的查看和删除,今天会先简单介绍添加和修改,因为添加和修改与删除一样都很简单,本篇会相对多介绍一点单表查询,大家都知道数据库中查询是最重要的一部分,毕竟无论是修改 ...

  3. Django框架之第六篇(模型层)--单表查询和必知必会13条、单表查询之双下划线、Django ORM常用字段和参数、关系字段

    单表查询 补充一个知识点:在models.py建表是 create_time = models.DateField() 关键字参数: 1.auto_now:每次操作数据,都会自动刷新当前操作的时间 2 ...

  4. django基础之day04,必知必会13条,双下划线查询,字段增删改查,对象的跨表查询,双下划线的跨表查询

    from django.test import TestCase # Create your tests here. import os import sys if __name__ == " ...

  5. 使用admin的步骤、必知必会13条、单表的双下划线、外键的操作、多对多的操作:

    MVC M: model 模型 与数据库交互 V: view 视图 HTML C:controller 控制器 流程 和 业务逻辑 MTV M:model ORM T:template 模板 HTML ...

  6. 测试脚本配置、ORM必知必会13条、双下划线查询、一对多外键关系、多对多外键关系、多表查询

    测试脚本配置 ''' 当你只是想测试django中的某一个文件内容 那么你可以不用书写前后端交互的形式而是直接写一个测试脚本即可 脚本代码无论是写在应用下的test.py还是单独开设py文件都可以 ' ...

  7. Django ORM单表查询必会13条

    必知必会13条 操作下面的操作之前,我们实现创建好了数据表,这里主要演示下面的操作,不再细讲创建准备过程 <1> all(): 查询所有结果 <2> filter(**kwar ...

  8. 13条必知必会&&测试

    1.13条必知必会 <> all(): 查询所有结果 <> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 <> get(**kwargs) ...

  9. MySQL使用和操作总结(《MySQL必知必会》读书笔记)

    简介 MySQL是一种DBMS,即它是一种数据库软件.DBMS可分为两类:一类是基于共享文件系统的DBMS,另一类是基于客户机——服务器的DBMS.前者用于桌面用途,通常不用于高端或更关键应用. My ...

随机推荐

  1. (4.2)mysql备份还原——备份概述

    1.什么情况下会用到备份呢? [1.1]灾难恢复 [1.2]单位审计:数据库在过去某一个点是什么样的 [1.3]跨机房灾备:异地备份 [1.4]认为的DDL或者DML语句,导致主从库的数据消失 [1. ...

  2. css自动换行如何设置?url太长会撑开页面

    我们更新文章时如果有引用其他文章一般会带一个原文url,但这个链接如果太长的话会把内容的版块撑开,整个排版乱了.那我们能不能设置css自动换行呢?如下图所示,其实只要两个样式就能搞定 word-wra ...

  3. 这可能是由于 CredSSP 加密 Oracle 修正。

    1.Win+R 输入regedit打开注册表 找到对应的以下目录 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Polici ...

  4. python基础(9)-迭代器&生成器函数&生成器进阶&推导式

    迭代器 可迭代协议和迭代器协议 可迭代协议 只要含有__iter__方法的对象都是可迭代的 迭代器协议 内部含有__next__和__iter__方法的就是迭代器 关系 1.可以被for循环的都是可迭 ...

  5. 安装 pymongo

  6. ShakaApktool 用法

    usage: ShakaApktool b[uild] [options] <app_path> -df,--default-framework 使用默认的框架资源文件. -f 跳过已编译 ...

  7. cocos2d-js 遮挡层(禁止触摸事件传递层)

    在游戏中,我们经常会碰到一些弹窗,这些弹窗禁止点透,也就是禁止触摸事件传递到底层,我们称之为遮挡层,这些遮挡层,需要开发遮挡层,我们首先得了解cocos2d-js的触摸传递机制,本文主要针对cocos ...

  8. 强力上攻后,在缓解期结束时,MACD将死叉,的后续情形

    强力上攻后,在缓解期结束时,MACD将死叉,的后续情形

  9. js中call,caller,callee,aplly

    1.函数的caller属性 (1).区分函数是在函数体调用还是顶层代码中调用:顶层中调用函数,该函数的caller属性返回null,在函数中调用,会返回调用发i函数的函数: <script> ...

  10. 关于plsqldev无法正常加载oracle instantclient中的oci.dll的其中一个原因

    事情的经过是这样的: 1. 新安装了windows10 系统,装了plsqldev 和 oracle instantclient,以及 instantclient sqlplus. 2.设置好了ORA ...