zoukankan      html  css  js  c++  java
  • 数据库(三)--多对多,一对多,一对一

    我们有四张表:
    person_publisher

     person_book

     person_author

     person_author_book

    接下来分别从正向查询(子表-->主表)和反向查询(主表-->子表)进行。

    1.一对一

    正向查询:查询book中id=2(python)对应的出版社

        book_obj=models.Book.objects.get(id=2)
        print(book_obj)
        print(book_obj.publisher.name)

    反向查询:查询publisher中id=1(清华大学出版社)对应的book

        publisher_obj=models.Publisher.objects.get(id=1)
        print(publisher_obj)
      #类名_set.all()
    print(publisher_obj.book_set.all())

     2.一对多

    正向查询:查询book中id=3(java)对应的出版社

        book_obj=models.Book.objects.get(id=3)
        print(book_obj)
        print(book_obj.publisher.name)

    反向查询:查询publisher中id=3(广州大学出版社)对应的book

        publisher_obj=models.Publisher.objects.get(id=3)
        print(publisher_obj)
        print(publisher_obj.book_set.all())

    那么,我们要是想查询python是由那几家出版社出版的(虽然一般只是一家) ,我们可以这样做:

        book_obj=models.Book.objects.filter(title='python')
        print(book_obj)
        for i in book_obj:
            print(i.publisher)

    其实,我们发现一对一和一对多查询基本上是差不多的。

    3.多对多

    正向查询:查询作者名为gong的所有book

        author_obj=models.Author.objects.get(name='gong')
        print(author_obj.book.all())

     反向查询:查询书为"网络基础"的所有作者

        book_obj=models.Book.objects.get(title='网络基础')
        print(book_obj.author_set.all())

     总而言之,正向查询直接顺序获取,反向查询用 类名(全部小写)_set.all() 来获取。

    弄了一天,总算初步理解了咋弄的。!!

  • 相关阅读:
    判断文件是否存在
    peewee模块更改数据-sqlite
    Python操纵数据库:peewee
    PyQt5调用主窗口
    FHQ-Treap学习笔记
    P3047 [USACO12FEB]Nearby Cows G(树形DP)
    P2986 [USACO10MAR]Great Cow Gathering G(树形DP)
    【普及】Codeforces Round #713(Div 3) 1512A~G
    P1272.重建道路(树形背包)
    P273.有线电视网(树上背包)
  • 原文地址:https://www.cnblogs.com/xiximayou/p/11779899.html
Copyright © 2011-2022 走看看