多表查询_子查询(基于对象的跨表查询)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | # 1.查询书籍主键为1的出版社 # book_obj = models.Book.objects.filter(pk=1).first() # # 书查出版社 正向 # res = book_obj.publish # print(res) # print(res.name) # print(res.addr) # 2.查询书籍主键为2的作者 # book_obj = models.Book.objects.filter(pk=2).first() # # 书查作者 正向 # # res = book_obj.authors # app01.Author.None # res = book_obj.authors.all() # <QuerySet [<Author: Author object>, <Author: Author object>]> # # print(res) # 3.查询作者jason的电话号码 # author_obj = models.Author.objects.filter(name='jason').first() # res = author_obj.author_detail # print(res) # print(res.phone) # print(res.addr) """ 在书写orm语句的时候跟写sql语句一样的 不要企图一次性将orm语句写完 如果比较复杂 就写一点看一点 正向什么时候需要加.all() 当你的结果可能有多个的时候就需要加.all() 如果是一个则直接拿到数据对象 book_obj.publish book_obj.authors.all() author_obj.author_detail """ # 4.查询出版社是东方出版社出版的书 # publish_obj = models.Publish.objects.filter(name='东方出版社').first() # 出版社查书 反向 # res = publish_obj.book_set # app01.Book.None # res = publish_obj.book_set.all() # print(res) # 5.查询作者是jason写过的书 # author_obj = models.Author.objects.filter(name='jason').first() # 作者查书 反向 # res = author_obj.book_set # app01.Book.None # res = author_obj.book_set.all() # print(res) # 6.查询手机号是110的作者姓名 # author_detail_obj = models.AuthorDetail.objects.filter(phone=110).first() # res = author_detail_obj.author # print(res.name) """ 基于对象 反向查询的时候 当你的查询结果可以有多个的时候 就必须加_set.all() 当你的结果只有一个的时候 不需要加_set.all() 自己总结出 自己方便记忆的即可 每个人都可以不一样 """ |
总结规律:
正向查询:外键字段在自己表中的就是正向
反向查询,外键字段不在自己表中的就是反向
多对多
正向查询:对象.字段名字 book.author.all() 为什么加all 因为查询可能会有多个作者 所以要加all 因为是多对多 所以都要加all
反向查询:对象.表面小写 author.book_set.all()为什么加all 因为查询可能会有多个作者 所以要加all 因为是多对多 所以都要加all
一对多
正向查询:对象.字段名字 book.publish 不加all 因为这里是多方查一方,查到的数据只有一个,外键字段在多的一方
反向查询:对象.表面小写 publish.book_set.all() 加all,因为这里是一方查多方,查到的数据可能是有多个的
一对一
正向查询:对象.字段名字
反向查询:对象.表面小写 这里反向的时候不需要加_set 因为是一对一 也不需要加all
就可以看出 多对多都需要加all,一对多反向的时候需要加all 一对一_set all都不用加
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用