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 ...