67 orm13查询语句,外键查询,多对多查询 单表查询双下划线方法

主要内容:https://www.cnblogs.com/maple-shaw/articles/9403501.html

注意:  如果想要文件中运行整个django项目:

  需要在文件中写入:

import os
if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "orm_operate.settings")
    import django
    django.setup()

1 orm常用的13个查询语句:分为以下四种

  a : 获取对象列表: 

    obj = models.Person.objects.all()
    obj1 = models.Person.objects.filter(id=1)
    obj2 = models.Person.objects.exclude(name=‘alex‘)
    # values 比较特殊, 对象列表中不再是一个一个的对象, 而是一个字典, 里面放着建和值
    obj3 = models.Person.objects.all().values()
    # value_list 也比较特殊, 对象列表中也不在是对象, 而是一个元祖, 里面放着每一行的值,
    obj4 = models.Person.objects.all().values_list()
    # print(obj4)
    # 对对象排序, -号表示可以取反序.
    obj5 = models.Person.objects.all().order_by(‘id‘)
    # print(obj5)
    # 必须在已有排序的基础上进行排序
    # obj6 = models.Person.objects.all().order_by(‘id‘).reverse()
    # 第二种方法: 也可以在models中的MATA方法中的ordering设置根据什么排序
    obj6 = models.Person.objects.all().reverse()
    # print(obj6)

  b : 获取对象:

  # 如果该条件不存在或者产生多条数据都会报错, 一般不推荐使用.
    obj7 = models.Person.objects.get(id=1)
    # first获取第一个对象, 即对应的elast获取最后一个对象.
    obj8 = models.Person.objects.all().first()
    obj9 = models.Person.objects.all().last()
    # obj10 = models.Person.objects.create(name=‘哪吒‘, age=25)
    # obj10.save()
    # print(obj10)
#     distinct  去重

  c : 返回数字

    obj11 = models.Person.objects.all().count()

  d : 返回布尔值

 obj12 = models.Person.objects.exclude(id=1).exists()

2  外键查询

class Book(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=32)
    press = models.ForeignKey(to=‘Press‘, related_name=‘books‘, null=True)

  正向查询:

    1 . press_id和press.id的区别

    # obj1 = models.Book.objects.get(id=1)
    # print(obj1.press.id)          #从book表中取到press_id , 然后再找到press表中的id = press_id 的对象取出press.id
    # print(obj1.press_id)                                        #直接从book表里面取数据, 查找一次

    2 . 关联字段:  关联字段__字段(跨表)

  找到湖南出版社所出版的所有书籍
    books = models.Book.objects.filter(press_id=(models.Press.objects.get(name=‘湖南卫视出版社‘)).id)    print(books)

   执行流程: 先从 press表中取出id , 根据id = press_id再从book表中title

  books = models.Book.objects.filter(press__name=‘湖南卫视出版社‘)     #使用了连表查询, 查一次.
   print(books)
  print(models.Book.objects.values_list("press__name"))

  反向查询:

    1 . 获取管理对象:

      press_obj = press.objects.get(id = 1)

      press_obj.books           获取的是一个管理对象, 设置 related_name=‘books‘

      press_obj.books.all() 获取的与该出版社相关的书籍对象列表

    2 . 设置和删除对应关系:

      obj1 = press.objects.get(id = 2)

      obj1.books.set(Book.objects.filter(id__in = [4, 5]))

      obj1.books.remove(*Book.objects.filter(id__in = [4, 5]))    press字段设置,  null = True

    3 . 关联字段:

       找出快乐大本营该书的出版社

      obj = models.Press.objects.filter(id=models.Book.objects.get(title=‘快乐大本营‘).press_id)

       print(obj)

       obj = models.Press.objects.filter(books__title=‘快乐大本营‘)   , #涉及到了一个连表查询, 查一次

      print(obj)

  

3 多对对的查询:

    obj = models.Author.objects.get(id__in=[1])
    # print(obj)
    # print(obj.name)
    print(obj.books.all())
    # obj.books.set([2, 3])    # 设置对应关系
    # obj.books.add(2,3)
    obj.books.remove(*models.Book.objects.all())  #删除对应关系

  

  

  

原文地址:https://www.cnblogs.com/gyh412724/p/9774692.html

时间: 2024-12-11 06:12:08

67 orm13查询语句,外键查询,多对多查询 单表查询双下划线方法的相关文章

Mysql 查询命令--单表查询

基本查询语句 SELECT语句是最常用的查询语句,它的使用方式有些复杂,但功能是相当强大的.SELECT语句的基本语法如下: select selection_list //要查询的内容,选择哪些列 from 数据表名 //指定数据表 where primary_constraint //查询时需要满足的条件,行必须满足的条件 group by grouping_columns //如何对结果进行分组 order by sorting_cloumns //如何对结果进行排序 having sec

15-5 单表查询

一 查询语法介绍(单表查询)1 语法SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 2 关键字的执行优先级(重点) 重点中的重点:关键字的执行优先级从上到下fromwheregroup byhavingselectdistinctorder bylimit说明:1.找到表:from 2.拿着where指定的约束条件,去文件/表中取出一条条记录 3.将取出的一条条记录进行分组

Java学习总结(十六)——MySQL数据库(中)分组,嵌套,连接查询及外键与关系表设计

一.分组查询 1.语法:group by 分组字段1[,分组字段2,.........] [having 分组后的筛选条件]2.注意:分组字段应该与select后的查询字段一致,否则查询结果无意义3.分组查询经常会与聚合函数一起使用例:(1)先建一张商品表(以此表为例进行分组查询) (2)插入记录 (3)查询:#1.计算每一种商品单价的平均价格 查询结果:#2.计算日用品种类的平均价格 查询结果:二.连接查询1.等值连接语法:select 字段1,字段2,........ from 表A,表B,

2015-10-19 SQL(新建数据库、创建表、注释、查询语句、新增、更新、删除、联合查询)

1.认识数据库并新建: 1)打开数据库,连接到服务器. 2)服务里类型不用管. 3)服务器名称:打个点“.”表示服务器在本地计算机,如果是托管在别人的服务器上,就输入服务器IP地址. 4)身份验证:如果是windows身份验证,就需要有管理员权限.一般托管在别人的服务器上,(包括正常情况下),都是用SQL身份验证,需要输入sa和密码(密码就是安装时让输入的密码). 2.  建立数据库: 在建立数据库名称时(各种名称时),都遵守一个命名规则: 1)用英文命名 2)每个单词的首字母大写(驼峰原则:首

2015.7.30 第十五课 sql(新建数据库、创建表、注释、查询语句、新增、更新、删除、联合查询)

1.认识数据库并新建: 1)打开数据库,连接到服务器. 2)服务里类型不用管. 3)服务器名称:打个点“.”表示服务器在本地计算机,如果是托管在别人的服务器上,就输入服务器IP地址. 4)身份验证:如果是windows身份验证,就需要有管理员权限.一般托管在别人的服务器上,(包括正常情况下),都是用SQL身份验证,需要输入sa和密码(密码就是安装时让输入的密码). 2.  建立数据库: 在建立数据库名称时(各种名称时),都遵守一个命名规则: 1)用英文命名 2)每个单词的首字母大写(驼峰原则:首

MySQL数据库 多表查询 交叉连接 自然连接 内连接 自连接 外连接 子查询 多表查询练习 单表查询练习 𚳮

原文: http://blog.gqylpy.com/gqy/466 置顶:来自一名75后老程序员的武林秘籍--必读(博主推荐) 来,先呈上武林秘籍链接:http://blog.gqylpy.com/gqy/401/ 你好,我是一名极客!一个 75 后的老工程师! 我将花两分钟,表述清楚我让你读这段文字的目的! 如果你看过武侠小说,你可以把这个经历理解为,你失足落入一个山洞遇到了一位垂暮的老者!而这位老者打算传你一套武功秘籍! 没错,我就是这个老者! 干研发 20 多年了!我也年轻过,奋斗过!我

【知了堂学习笔记】SQL查询基础语句(单表查询、多表查询)

SQL查询基础 1.单表查询 从数据库中查找数据 专业的称谓又称为投影 基本查询语句结构 select 列 from 表 * 所有列不是所有其他东西 查询所有数据 例:SELECT * FROM t_studen 需要执行比较细的操作  加上条件筛选:查询id为2号的学生信息 SELECT * FROM t_student WHERE id=2; 筛选的执行步骤 例:SELECT * FROM t_student WHERE id=2; SELECT *          (3) 再查询  筛选

Oracle的单表查询语句

使用Oracle 数据库的测试表单: --单表查询数据 语法 select (查询) * 所有 /查询的字段,多个字段 ,隔开 from (来自) 表名称 --查询所有员工的信息 select * from scott.emp; select * from dept; --查询所有员工的编号,姓名和职位 指定字段名查找数据 select empno,ename,job from emp; --查询所有员工的编号,姓名和年薪 select * from emp; select empno,enam

Django Mysql数据库-基于双下划线的跨表查询

一.基于双下划线的跨表查询 Django 还提供了一种直观而高效的方式在查询(lookups)中表示关联关系,它能自动确认 SQL JOIN 联系.要做跨关系查询,就使用两个下划线来链接模型(model)间关联字段的名称,直到最终链接到你想要的 model 为止.(相当于用sql语句用join连接的方式,可以在settings里面设置,可查看sql语句) 数据库模型: class Book(models.Model): nid = models.AutoField(primary_key=Tru