收藏的技巧链接&Django项目优化技巧笔记

Django数据库查询技巧

1.Django-mysql数据库条件查询

2.filter的筛选条件

3.filter的多条件查询

4.对model的外键的查询
外键的查询,其实相当于 model设置的外键名称( F_modelname )就是指向外键链接的另一个mode,所以使用方式为:
外键名F_modelname__外键Model字段__筛选条件 = ”xxxxx“


Django的视图函数view

Django的视图函数view


Django前端页面渲染

渲染数据格式化


Django提高渲染速度

有一个项目,一次filter出的Queryset有4000多条数据,每条数据7、8个字段
这么多数据用{%for%}迭代渲染到前端花费了20s多,太慢了
搜索了半天渲染速度提高的办法,都不知所云
然后想到会不会是Queryset数据结构的问题,迭代访问起来太慢
然后搜索一下,真是有这个问题,然后解决办法就是使用values_list(),将字典(键值对)结构转化为元组(纯值)
最终4000条数据渲染完毕耗时一点几秒,1000条数据以内不到1秒
使用方式如下:

data = StudentCgg.objects.filter((Q(id__icontains=q) | Q(name__icontains=q)) & Q(age__icontains=q)).values_list()
data = StudentCgg.objects.all().values_list()

则渲染使用如下:
{% for val in data %}
–{{ val.id }} /=修改为=> / {{ val.0 }}
–{{ val.name }} /
=修改为=>
/ {{ val.1 }}
–{{ val.age }} /=修改为=>/ {{ val.2 }}
{% endfor %}
下标顺序是按values_list()里的顺序

这是提供了我思路的网址

结合 .values_list() 优化查询速度

一、优化查询速度
1.Queryset类型转列表——列表生成器

适合values_list()限定提取出单个字段时使用

queryset_obj = Modelsname.objects.filters(…).order_by(…).distint().values_list(“username”,“userage”)
list_obj = [ele[0] for ele in queryset_obj] # 从queryset列表中提取每个元组的0号下标元素,构成列表

第一行末尾的values_list()可以把结果转换为Queryset列表包元组的格式:
Queryset[(xxx,“xxx”),(xxx,“xxx”),(xxx,“xxx”),…]
第二行列表生成器,提取每个元组内的0号位元素组成列表

当然,如果只是要一个字段,可以添加flat直接获取列表Queryset:

queryset_list = Modelsname.objects.filters(…).order_by(…).distint().values_list(“username”, flat=True)

生成的Queryset格式为:
Queryset[“username1”,“username2”,“username3”,…] ,可以直接当作列表使用
优: 简化queryset结构,提升使用效率
缺: 数据量大时,耗时还是比较长(惰性查询)

2.Queryset类型转字典——dict()

适合values_list()限定两个字段时 使用

queryset_obj = Modelsname.objects.filters(…).order_by().distint().values_list(“username”,“email”)
dict_obj = dict(queryset_obj) # 默认第一个字段username为键,第二个字段email为对应的值

3.目前找到一个其他的优化 筛选量大惰性查询明显 的方式:

项目的要求是从大量数据(差不多9000w条)里筛出有数据的最新的那3天日期,老的实现方法是依据时间倒序筛选前几条,耗时4s:

Models.filter(sno__icontains=“000001”).order_by(“-data_time”)[:300].xx

发现一个比这样排时间筛选耗时更低的方法:根据唯一的id从大到小排序,耗时1s:

Models.filter(sno__icontains=“000001”).order_by(“-id”)[:300].xx


二、了解惰性查询

Django查询数据库数据为惰性查询
执行一句非常复杂而庞大的python查询语句并不会花费时间,
但是第一次访问查询结果的内容时,会花费时间去数据库真正的查询数据,并将真正的结果放到缓存中
然后后续的访问查询结果将访问缓存获取.

怎么解决惰性查询问题?

我也在找,知道的大佬烦请指教!!


BootStraptable使用技巧

基本使用
BootStraptable参数大全
参数基本使用


JS字符串处理

JS字符串处理大全


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值