首页 > 其他 > 详细

ORM中的相关操作

时间:2020-04-01 15:16:40      阅读:57      评论:0      收藏:0      [点我收藏+]

单表查询之神奇的双下划线

models.Tb1.objects.filter(id__lt=10, id__gt=1)   # 获取id大于1 且 小于10的值
 
models.Tb1.objects.filter(id__in=[11, 22, 33])   # 获取id等于11、22、33的数据
models.Tb1.objects.exclude(id__in=[11, 22, 33])  # not in
 
models.Tb1.objects.filter(name__contains="ven")  # 获取name字段包含"ven"的
models.Tb1.objects.filter(name__icontains="ven") # icontains大小写不敏感
 
models.Tb1.objects.filter(id__range=[1, 3])      # id范围是1到3的,等价于SQL的bettwen and
 
类似的还有:startswith,istartswith, endswith, iendswith 

date字段还可以:
models.Class.objects.filter(first_day__year=2017)

ForeignKey操作

正向查找

1.对象查找(跨表)

语法:

对象.关联字段.字段

    book_obj = Book.objects.first() # 第一本书对象
    print(book_obj.publisher)       # 得到这本书关联的出版社对象
    print(book_obj.publisher_id)    # 得到出版社对象的id
    print(book_obj.publisher.name)    # 得到出版社对象的名称

2.字段查找(跨表)

语法:

关联字段__字段

    #利用双下划线  跨表查询   双下划线就表示 跨一张表
    print(Book.objects.values_list("publisher__name"))  #所有的出版社的名称

反向操作

1.对象查找

语法:

关联字段__字段

 

    publisher_obj = Publisher.objects.first()  # 找到第一个出版社对象
    books = publisher_obj.book_set.all()  # 找到第一个出版社出版的所有书
    # books = publisher_obj.books.all()  # 找到第一个出版社出版的所有书,这里的books是Book表中publisher对象的一个别名(加上,related_name="books")
    print(books.values_list("name"))  # 找到第一个出版社出版的所有书的书名

2.字段查找

    # 双下划线 跨表查询
    print(Publisher.objects.values_list("book__name"))

其他链接

ORM回顾-----点击这里

ORM中的相关操作

原文:https://www.cnblogs.com/liujie12/p/12612595.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!