ORM正向和反向查询

表结构

from django.db import models

# Create your models here.
class Person(models.Model):
    name = models.CharField(verbose_name=‘作者姓名‘, max_length=10)
    age = models.IntegerField(verbose_name=‘作者年龄‘)

class Book(models.Model):
    person = models.ForeignKey(Person, related_name=‘person_book‘)
    title = models.CharField(verbose_name=‘书籍名称‘, max_length=10)
    pubtime = models.DateField(verbose_name=‘出版时间‘)

插入数据

# Book表id   title  pubtime          person_id
1    书1    1533225600000    1
2    书2    1533225600000    1
3    书3    1534435200000    1
4    书4    1535644800000    2
5    书5    1535126400000    3
id   name    age1    作者1    1
2    作者2    2
3    作者3    3

正向查询: 外键所在表去查另一张表,Book >> Person

反向查询:普通表去查外键所在的表,Person >> Book

正向查询,基于对象跨表查询

book_obj = models.Book.objects.all()  # 取到书籍对象book_obj.person.name   # 书籍作者名字,htmlbook_obj.person.id   # 书籍作者id,html

跨表查询,利用双下划线跨表查询

models.Book.objects.filter(id=1).values(‘publisher__name‘)  # 查询id是1的书的出版社的名字,一条双下划线就是跨一张表models.Book.objects.filter(id=1).values_list(‘publisher__name‘)  

反向查询

对象查询  obj.表名_set()

publisher_obj = models.Publisher.objects.first()  # 找到第一个出版社对象
ret = publisher_obj.book_set.all()  # 找到第一个出版社出版的所有数
for i in ret:  # 循环对象
    print(i.name)  # 打印出每一个书的书名
publisher_obj = models.Publisher.objects.first()  # 找到第一个出版社对象
books = publisher_obj.book_set.all()  # 找到第一个出版社出版的所有书
titles = books.values_list("name")  # 找到第一个出版社出版的所有书的书名print(titles)因为使用了releted_name,就是用person_book代替了表字段名字表字段person = models.ForeignKey(Person, related_name=‘person_book‘)所以这一这样写books = publisher_obj.person_book.all()titles = books.values_list(‘name‘)print(titles)如果表字段person = models.ForeignKey(Person, related_name=‘person_book‘,related_query_name="xxoo")related_query_name="xxoo",这里表示跨表查询xxoo代替表的名字bookbooks = publisher_obj.ooxx_set.all()

基于双下划线

ret = models.Publisher.objects.filter(id=1).values_list(‘person_book__name‘)person_book是通过releted_name给对应关系起的名字,通过person_book就找到了关联的表,再通过双下划线找到nameprint(ret)

附带django里面脚本的代码

import os

if __name__ == ‘__main__‘:
    # 加载Django项目的配置信息
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "项目名.settings")
    # 导入Django,并启动Django项目
    import django
    django.setup()

    from app01 import models
    # 查询id为1的出版社出版的所有书的name
    ret = models.Publisher.objects.filter(id=1).values_list(‘person_book__name‘)
    print(ret)

原文地址:https://www.cnblogs.com/aaronthon/p/9520832.html

时间: 2024-11-05 11:46:54

ORM正向和反向查询的相关文章

linux系统建立DNS主从域名服务器实现正向反向查询

实验要求:建立DNS主从域名服务器实现正向反向查询 实验步骤: 1.正向查询 首先挂载并且安装bind软件 查看工作目录 进入主配置文件并且修改配置文件的监听端口的ip地址指向自己,允许查询的网段为任何人 区域文件 进入并配置区域设置文件 在进入named 查看,并且将区域配置的数据文件named.localhost文件的内容拷贝到benet.com.zone当中并重新编辑 建立正向查询 指定本机地址为DNS服务器地址写入etc/resolv.conf文件,写入完之后查看下 关闭防火墙,并且开启

django ORM model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct

版权归作者所有,任何形式转载请联系作者.作者:petanne(来自豆瓣)来源:https://www.douban.com/note/301166150/ 1.多表连接查询:感觉django太NX了.  class A(models.Model):    name = models.CharField(u'名称')  class B(models.Model):    aa = models.ForeignKey(A)B.objects.filter(aa__name__contains='se

django ORM model filter 条件过滤,及多表连接查询、反向查询字段

1.多表连接查询:  class A(models.Model): name = models.CharField(u'名称')  class B(models.Model):    aa = models.ForeignKey(A)B.objects.filter(aa__name__contains='searchtitle') 2 反向查询,后来插入记录  class A(models.Model):    name = models.CharField(u'名称')  class B(m

ORM的多表查询详述

ORM的多表查询 ORM最核心与用的最多的地方就是跨表查询了.这里的"跨表查询"大分为以下几种:基于对象的跨表查询.基于双下划线的跨表查询.聚合查询.F与Q查询以及分组查询. 下面就为大家详细阐述这几种查询的具体细节及用法. 另外,本文省去了Django与MySQL数据库之间建立连接以及创建表.添加表记录的过程.如果大家有兴趣可以回顾下我之前的两篇文章: https://www.cnblogs.com/paulwhw/p/9395085.html https://www.cnblogs

ORM 单表操作查询 多表操作查询及增删改查

------------------------------------------只有对前途乐观的人,才能不怕黑暗,才能有力量去创造光明.乐观不是目的,而是人生旅途中的一种态度. 多表操作 创建模型 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者模型之间是一对一的关系(one-to-one) 出版商模型:出版商有名称,所在城市以及email. 书籍模型: 书籍有书名和出版日期

从DNS基础到在CentOS6.5上“玩着”搭建一个支持正向、反向解析的“

1.什么是DNS? (Domain Name System)域名系统. DNS其实实现的功能很简单也很有效,它能够让用户可以不用记得那些经常要访问服务器的ip地址,直接要你输入类似拼音格式的就可以访问到那些数字串的ip地址.假设以61.120.155.14(举个例子),我们总是用这些数字进行网页服务器的访问岂不是很蛋疼,毕竟很多人还是对文字甚至拼音字母更容易让正常人记忆.这就是DNS的功能. 当然,它不仅能把那些你输入的拼音字母转换成ip地址的数字串,它还支持把那些数字串转换成你想访问的实际的网

django model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct

1.多表连接查询:当我知道这点的时候顿时觉得django太NX了.  class A(models.Model):    name = models.CharField(u'名称')  class B(models.Model):    aa = models.ForeignKey(A)B.objects.filter(aa__name__contains='searchtitle') 1.5 我叫它反向查询,后来插入记录1.5,当我知道的时候瞬间就觉得django太太太NX了.  class

车库反向查询机——安泊达

反向查询机 产品详情 安装在车主进入车场的入口处,通过触摸的方式输入车牌号,触摸屏上的地图就会显示告知车主自身的位置与车辆所停的位子.如果没有显示出来还可以进行模糊查询,通过停车的时间,显示该车停车后车主选中时间内的停车车辆图片供车主进行选择. 工作电压:230V 网络接口:TCP/IP 显示器:19"液晶显示器 工作温度:-20℃-+70℃

三层神经网络的反向查询

前面讲的都是前向传播,已知输入层数据,计算出输出层结果.如果我们已知输出层结果是否可以反向推理出图片的像素值呢.在前面的神经网络基础上面进行修改. 1.训练 训练神经网络和前面讲的一样. 2.定义反向查询函数 1.>定义反向激活函数.利用logit函数 self.inverse_activation_function = lambda x: spc.logit(x) 2.>利用已知结果得到激活之前的输出值,在通过矩阵点乘得到激活之后的隐藏层的值,在通过反向激活函数得到激活之前的隐藏层值,在通过