django查詢中的 in

2021-09-19 17:46:24 字數 953 閱讀 3791

rackid = request.post['rackid']  

retdir['rackid'] = rackid

racks = rack.objects.filter(rackid__icontains = rackid)

equipments = equipment.objects.filter(rack__in = racks)

可以看出__in等號後面可以直接跟queryset,方便查詢,但是這樣會極大的影響查詢的效率,應為racks會被變成一張子表去執行,它的sql會是如下

select … where id in (select id from …)

所以我們需要優化查詢,在__in中盡量使用以經營定義好的陣列,你可以這樣查

equipments = equipment.objects.filter(xx__in=list(racks.values_list('id',flat=true)))
這樣的話就會去陣列中找對應值,它的sql會是如下

select … where id in (1,2,3)

rackid = request.post['rackid']  

retdir['rackid'] = rackid

racks = rack.objects.filter(rackid__icontains = rackid)

ids = ",".join(rack.id)

if ids == none or ids == '':

ids = '0'

equipments = equipment.objects.extra(where=['rack_id in ('+ ids +')'])

Django中的連線查詢

django中的連線查詢 建立一對一對映語法 class wife models.model name models.charfield max length 30,verbose name 姓名 age models.integerfield verbose name 年齡 增加一對一的關係對映,...

django中sql語句的查詢

執行原始sql查詢 當 模型查詢api 不要走得足夠遠,你 可以回到寫原始sql。django提供了兩種方式執行原始 sql查詢 您可以使用 manager.raw 來 執行原始查詢和 回歸模型例項 或者你可以完全避免模型層 執行自定義sql直接 執行原始查詢 的 生 經理的方法可以用來執行原始的s...

django查詢中extra的應用

今天有個需求需要查詢到資料庫resc metadata欄位 是乙個json型別的值 中job group去重後的值放入乙個列表 一 通過pymysql完成def set cluster id value data,hirer,resc dict db mysqldb.connect sqlconf ...