日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

django model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct

發(fā)布時間:2023/12/9 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 django model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

1.多表連接查詢:當(dāng)我知道這點的時候頓時覺得django太NX了。
??class A(models.Model):
????name = models.CharField(u'名稱')
??class B(models.Model):
????aa = models.ForeignKey(A)
B.objects.filter(aa__name__contains='searchtitle')

1.5 我叫它反向查詢,后來插入記錄1.5,當(dāng)我知道的時候瞬間就覺得django太太太NX了。
??class A(models.Model):
????name = models.CharField(u'名稱')
??class B(models.Model):
????aa = models.ForeignKey(A,related_name="FAN")
????bb = models.CharField(u'名稱')
??查A: A.objects.filter(FAN__bb='XXXX'),都知道related_name的作用,A.FAN.all()是一組以A為外鍵的B實例,可前面這樣的用法是查詢出所有(B.aa=A且B.bb=XXXX)的A實例,然后還可以通過__各種關(guān)系查找,真赤激!!!

2.條件選取querySet的時候,filter表示=,exclude表示!=。
querySet.distinct() ?去重復(fù)
__exact ? ? ? ?精確等于 like 'aaa'
?__iexact ? ?精確等于 忽略大小寫 ilike 'aaa'
?__contains ? ?包含 like '%aaa%'
?__icontains ? ?包含 忽略大小寫 ilike '%aaa%',但是對于sqlite來說,contains的作用效果等同于icontains。
__gt ? ?大于
__gte ? ?大于等于
__lt ? ?小于
__lte ? ?小于等于
__in ? ? 存在于一個list范圍內(nèi)
__startswith ? 以...開頭
__istartswith ? 以...開頭 忽略大小寫
__endswith ? ? 以...結(jié)尾
__iendswith ? ?以...結(jié)尾,忽略大小寫
__range ? ?在...范圍內(nèi)
__year ? ? ? 日期字段的年份
__month ? ?日期字段的月份
__day ? ? ? ?日期字段的日
__isnull=True/False

例子:
>> q1 = Entry.objects.filter(headline__startswith="What")
>> q2 = q1.exclude(pub_date__gte=datetime.date.today())
>> q3 = q1.filter(pub_date__gte=datetime.date.today())
>>> q = q.filter(pub_date__lte=datetime.date.today())
>>> q = q.exclude(body_text__icontains="food")

即q1.filter(pub_date__gte=datetime.date.today())表示為時間>=now,q1.exclude(pub_date__gte=datetime.date.today())表示為<=now

2013/12/12補充:
“在django models中取得一個字段的distinct值”。就是select distinct xxx ?from table_name ...這樣的功能。使用values會生成ValuesQuerySet(形如N個dict組成的list),猜測大數(shù)據(jù)無額外性能影響,畢竟queryset系列都是使用時才查詢操作的。
xxxx.objects.values("field_name").distinct()
#或者
xxxx.objects.distinct().values("field_name")
這兩句生成的sql語句相同,原帖地址:http://blog.csdn.net/tsbob/article/details/1340293。

關(guān)于緩存:
queryset是有緩存的,a = A.objects.all(),print [i for i in a].第一次執(zhí)行打印會查詢數(shù)據(jù)庫,然后結(jié)果會被保存在queryset內(nèi)置的cache中,再執(zhí)行print的時候就會取自緩存。
很多時候會遇到僅需判斷queryset是否為空的情況,可以1. if queryset:pass 2.if queryset.count>0:pass 3.if queryset.exists():pass. 三種方式性能依次提升。
當(dāng)queryset非常巨大時,cache會成為問題。此時可以queryset.iterator(),迭代器的用處就不多說了,根據(jù)具體需求情況使用。


轉(zhuǎn)載于:https://my.oschina.net/u/993130/blog/209460

總結(jié)

以上是生活随笔為你收集整理的django model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。