前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >数据库(三)--多对多,一对多,一对一

数据库(三)--多对多,一对多,一对一

作者头像
西西嘛呦
发布2020-08-26 10:54:17
发布2020-08-26 10:54:17
1.3K00
代码可运行
举报
运行总次数:0
代码可运行

我们有四张表: person_publisher

person_book

person_author

person_author_book

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

1.一对一

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

代码语言:javascript
代码运行次数:0
运行
复制
    book_obj=models.Book.objects.get(id=2)
    print(book_obj)
    print(book_obj.publisher.name)

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

代码语言:javascript
代码运行次数:0
运行
复制
    publisher_obj=models.Publisher.objects.get(id=1)
    print(publisher_obj)
  #类名_set.all()
    print(publisher_obj.book_set.all())

2.一对多

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

代码语言:javascript
代码运行次数:0
运行
复制
    book_obj=models.Book.objects.get(id=3)
    print(book_obj)
    print(book_obj.publisher.name)

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

代码语言:javascript
代码运行次数:0
运行
复制
    publisher_obj=models.Publisher.objects.get(id=3)
    print(publisher_obj)
    print(publisher_obj.book_set.all())

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

代码语言:javascript
代码运行次数:0
运行
复制
    book_obj=models.Book.objects.filter(title='python')
    print(book_obj)
    for i in book_obj:
        print(i.publisher)

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

3.多对多

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

代码语言:javascript
代码运行次数:0
运行
复制
    author_obj=models.Author.objects.get(name='gong')
    print(author_obj.book.all())

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

代码语言:javascript
代码运行次数:0
运行
复制
    book_obj=models.Book.objects.get(title='网络基础')
    print(book_obj.author_set.all())

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-11-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档