zoukankan      html  css  js  c++  java
  • Django_基于对象——跨表查询

    一对多:

      如果有A表和B表,关联属性在那个表A中。

        正向查询:A---->B

    # 一对多的正向查询:查询三国演义这本书的出版社的名字
    book_obj = models.Book.objects.filter(title='三国演义').first()
    print(book_obj.publish)     # 与这本书关联的出版社对象
    print(book_obj.publish.name)    # 从出版社对象中获取出版社的名字

        反向查询:B---->A

    # 一对多的反向查询:查询人民出版社出版过的书籍名称
    publish_obj = models.Publish.objects.filter(name='人民出版社').first()
    ret = publish_obj.book_set.all()  # 对象.表名_set.all()
    print(ret)  # 查询到的书籍的对象
    print(ret.values('title'))  # 拿出书籍对象中的title字段。

    多对多:

      如果有A表和B表,关联属性在那个表A中。

        正向查询:A---->B

    # 查询aaaaa的作者的名字
    book_obj = models.Book.objects.filter(title="aaaaa").first()
    author_list = book_obj.authors.all()  # 关联的所有作者的对象的集合。
    print(author_list)  # 是一个列表
    print(author_list[0].name, author_list[1].name)  # 从列表中拿出每一个对象,然后获取对象中的name字段

        反向查询:B---->A

    # 查询主宰出版过的所有书籍的名称
    author_obj = models.Author.objects.filter(name="主宰").first()
    ret = author_obj.book_set.all()    # 作者对象.表明_set.set.all()
    print(ret)  # 查询到的书籍对象
    print(ret[0].title, ret[1].title)   # 从书籍对象能获取书籍的名称

    一对一:

      如果有A表和B表,关联属性在那个表A中。

        正向查询:A---->B

    # 查询作者女娲的地址信息
    author_obj = models.Author.objects.filter(name="女娲").first()
    ret = author_obj.authordetail   # 作者表对象.字段
    print(ret)  # 详情信息对象
    print(ret.addr)     # 从对象中获取地址信息

        反向查询:B---->A

    # 查询地址为北京的作者名字
    obj = models.AuthorDetail.objects.filter(addr="北京").first()
    ret = obj.author    # 对象.表名
    print(ret)  # 查询到的作者表对象
    print(ret.name)     # 从对象中获取name字段
  • 相关阅读:
    在Eclipse中写第一个hibernate小例子
    [转载]mysql 学习笔记
    hibernate.cfg.xml 配置(摘录)
    j2ee笔试题目
    J2EE综合—Struts常见错误的全面汇总
    在Eclipse中写第一个hibernate小例子
    j2ee笔试题目
    hibernate.cfg.xml 配置(摘录)
    [转载]mysql 学习笔记
    J2EE综合—Struts常见错误的全面汇总
  • 原文地址:https://www.cnblogs.com/wangdianchao/p/12732187.html
Copyright © 2011-2022 走看看