首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Django进阶-5-ORM连表查询

Django进阶-5-ORM连表查询

作者头像
小团子
发布2019-07-18 15:58:43
发布2019-07-18 15:58:43
1.7K00
代码可运行
举报
文章被收录于专栏:数据云团数据云团
运行总次数:0
代码可运行

一、反向连表查询

① 通过object的形式反向连表

obj.小写表名_set.all()

代码语言:javascript
代码运行次数:0
运行
复制
publish=models.Publish.objects.filter(name__contains='长沙').first()
books=publish.book_set.all()
  for book in books:
    print(book.title)

② 通过object的形式反向绑定外键关系

代码语言:javascript
代码运行次数:0
运行
复制
authorobj = models.Author.objects.filter(id=1).first()
objects = models.Book.objects.all()
authorobj.book_set.add(*objects)
authorobj.save()

③ 通过values双下滑线的形式

objs.values("小写表名__字段")

注意对象集合调用values(),正向查询是外键字段__XX,而反向是小写表名__YY看起来

比较容易混淆;

代码语言:javascript
代码运行次数:0
运行
复制
books=models.Publish.objects.filter(name__contains='湖南').values('name','book__title')
authors=models.Book.objects.filter(title__icontains='云团').values('author__name')
print(authors)
代码语言:javascript
代码运行次数:0
运行
复制
 filter()也支持__小写表名语法进行连表查询:
代码语言:javascript
代码运行次数:0
运行
复制
publishs=models.Publish.objects.filter(book__title='数据分析').values('name')
print(publishs)

二 、利用双下划线将字段和对应的操作连接起来

① 获取个数

代码语言:javascript
代码运行次数:0
运行
复制
models.Tb1.objects.filter(name='seven').count()

② 大于,小于

代码语言:javascript
代码运行次数:0
运行
复制
# 获取id大于1的值
models.Tb1.objects.filter(id__gt=1)
# 获取id大于等于1的值
models.Tb1.objects.filter(id__gte=1)
models.Tb1.objects.filter(id__lt=10)
# 获取id小于10的值
models.Tb1.objects.filter(id__lte=10)
# 获取id大于1 且 小于10的值
models.Tb1.objects.filter(id__lt=10, id__gt=1)

③ in & isnull

代码语言:javascript
代码运行次数:0
运行
复制
# 获取id等于11、22、33的数据
models.Tb1.objects.filter(id__in=[11, 22, 33])
# not in
models.Tb1.objects.exclude(id__in=[11, 22, 33])

# isnull
Entry.objects.filter(pub_date__isnull=True)

④ contains

代码语言:javascript
代码运行次数:0
运行
复制
models.Tb1.objects.filter(name__contains="ven")
# icontains大小写不敏感
models.Tb1.objects.filter(name__icontains="ven")
models.Tb1.objects.exclude(name__icontains="ven")

⑤ range

代码语言:javascript
代码运行次数:0
运行
复制
models.Tb1.objects.filter(id__range=[1, 2])
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据云团 微信公众号,前往查看

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

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

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