Django orm查询操作

基于双下划线查询
切记!!!!正向查询按字段,反向查询按表名的小写
正向:在Book表里设置关联Obj表,Book------>Obj就是正向查询
反向:在Book表里设置关联Obj表,Obj------>Book就是反向查询

废话不多说,直接上例子:

 

数据
class Book(models.Model):
    nid=models.AutoField(primary_key=True)
    title=models.CharField(max_length=32)
    price=models.DecimalField(max_digits=8,decimal_places=2) # 999999.99
    pub_date=models.DateTimeField()  # "2012-12-12"
    publish=models.ForeignKey(to="Publish",on_delete=models.CASCADE)  # 级联删除
    authors=models.ManyToManyField(to="Author")
    def __str__(self):
        return self.title

class Publish(models.Model):
    nid = models.AutoField(primary_key=True)
    name=models.CharField(max_length=32)
    email=models.CharField(max_length=32)
    def __str__(self):
        return self.name

class Author(models.Model):
    nid = models.AutoField(primary_key=True)
    name=models.CharField(max_length=32)
    age=models.IntegerField()
    email=models.CharField(max_length=32)
    ad=models.OneToOneField(to="AuthorDetail",on_delete=models.CASCADE)
    def __str__(self):
        return self.name

class AuthorDetail(models.Model):
    addr=models.CharField(max_length=32)
    tel=models.IntegerField()
    def __str__(self):
        return self.addr

以上是4张表,实际在操作中是5张表,有一张虚拟的表,Django自动给我们创建的

一下是各种查询的练习题

 1 查询python这本书出版社的名字
 2 查询人民日报出版社出版的所有的书籍的名称
3 查询python这本书籍的作者的年龄
4 查询李二短出版过的所有的书籍名称
5 查询任康娜的手机号
6 查询手机号为234的作者的名字
7查询老男孩出版社出版过的所有书籍的名字以及作者的姓名
8手机号以132开头的作者出版过的所有书籍名称以及出版社名称

答案:

1 查询python这本书出版社的名字
     正向:ret = Book.objects.filter(title=‘python‘).values(‘publish__name‘)
     反向:ret = Publish.objects.filter(book__title=‘python‘).values(‘name‘)
     print(ret)  

     2 查询人民日报出版社出版的所有的书籍的名称
     ret = Publish.objects.filter(name=‘人民日报出版社‘).values(‘book__title‘)
   ret = Book.objects.filter(Publish__name=‘人民日报出版社‘).values(‘title‘)
    print(ret) 

3 查询python这本书籍的作者的年龄   ret = Book.objects.filter(title=‘python‘).values(‘authors__age‘)    ret = Authors.objects.filter(book__title=‘python‘).values(‘age‘)
  print(ret)(以下反向查询不一一列举,具体参考前3个)
4 查询李二短出版过的所有的书籍名称   ret = Author.objects.filter(name=‘李二短‘).values(‘book__title‘) print(ret)   5 查询任康娜的手机号   ret = Author.objects.filter(name=‘任康娜‘).values(‘ad__tel‘) print(ret) 

6 查询手机号为234的作者的名字   ret = AuthorDetail.objects.filter(tel=234).values(‘author__name‘) print(ret) 

7查询老男孩出版社出版过的所有书籍的名字以及作者的姓名   ret = Publish.objects.filter(name=‘老男孩出版社‘).values(‘book__title‘,‘book__authors__name‘) print(ret)

8手机号以132开头的作者出版过的所有书籍名称以及出版社名称   ret = AuthorDetail.objects.filter(tel__startswith=345).values(‘author__book__title‘,‘author__book__publish__name‘) print(ret)

原文地址:https://www.cnblogs.com/lzqrkn/p/9858372.html

时间: 2024-09-29 12:04:24

Django orm查询操作的相关文章

Django 第十课 4.【ORM查询操作】

#查询 1:exact:在底层会被翻译成 '=' article = Article.objects.filter(title__exact='hello') 2:iexact:在底层被翻译成 'LIKE' article = Article.objects.filter(title__iexact='hello') * LIKE 和 = :大部分情况下都是等价的,只有少数情况下是不等价的. * exact和iexact:他们的区别其实就是LIKE和=的区别,因为exact会被翻译成=,而iex

Django ORM相关操作

一般操作 官方文档链接 常用必会操作(13条) <1> all(): 查询所有结果 <2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 <3> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误. <4> exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象 <5> values(*field): 返回一个Value

django orm查询方法详解

目录 1.1.1 生成查询 1.1.2 创建对象 1.1.3 保存修改的对象 1.1.4 保存 ForeignKey 和 ManyToManyField 字段 1.1.5 检索对象 1.1.6 检索所有的对象 1.1.7 过滤检索特定对象 1.1.8 链接过滤 1.1.9 过滤结果集是唯一 1.2.1 结果集是延迟的 1.2.2 其他的QuerySet方法 1.2.3 限制 QuerySets 1.2.4 字段查找 1.2.5 跨关系查询 1.2.6 过滤器可参考模型字段 1.2.7 缓存查询集

Django—— ORM查询(sql优化)优化了解,Django(元信息)元类建索引

Django(元信息)元类建索引 索引:索引的一个主要目的就是加快检索表中数据,索引是经过某种算法优化过的,因而查找次数要少的多.可见,索引是用来定位的. class Book(models.Model) name = models.CharField(max_length=64) class Meta: # 自定义表名 db_table = 'table_name' # 联合索引: 索引的一个主要目的就是加快检索表中数据 index_together = ('tag1', 'tag2') #

Django ORM查询总结

Django ORM 中单表查询: querySet 与 model对象 1.all() :调用者:objects管理器,返回queryset 2.filter() : 调用者:objects管理器,返回queryset 3.get() 方法: 调用者:objects管理器,返回查询到的model对象(注意:查询结果有且只有一个才执行) 4.first(),last() 方法:调用者:queryset,返回model对象 5.exclude() : 调用者:objects管理器,返回一个quer

Python - Django - ORM 查询方法

models.py: from django.db import models class Human(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=32) age = models.IntegerField() birthday = models.DateField(auto_now_add=True) 在数据库中添加几条数据 在 Python 脚本中调用 Dj

python day-76 django orm 查询链表

一.基于双下划线跨表查询(join查询) 在上一篇中,我们简单的介绍了基于对象的跨表查询,本章将继续阐述基于双下划线的跨表查询,所用的表格均为上章中所创建的表格.    ##########################基于双下划线的查询:正向查询,按字段,反向查询,按表名##################### 1.一对多 实例一(正向,用字段): # 查询红楼梦的出版社名称 #方式1: ret=Book.objects.filter(title="红楼梦").values(&q

Django—ORM数据库操作

---恢复内容开始--- 一.orm介绍 1 ORM即Object Relational Mapping,全称对象关系映射. 优点: 1 不用写sql,不会sql的人也可以写程序 2 开发效率高 2 缺点: 1 可能sql的效率低 3 如何使用: 如果连接mysql:在setting里配置: 'default': { 'ENGINE': 'django.db.backends.mysql', 'HOST': '127.0.0.1', 'PORT': 3306, 'USER': 'root', '

django知识之ORM查询

1. ORM字段 1. AutoField(primary_key=True)      -------->自增且主键 2. CharField(max_length=16)         --------->varchar类型(char类型可以自定义 类改写db_type) 3. IntegerField(null=True) --> 最大10位    -------->int类型(最大10位所以手机号码一般用char或者varchar类型) 4. DateField(auto