时间:2021-05-22
查询操作和性能优化
1.基本操作
增
models.Tb1.objects.create(c1='xx', c2='oo') 增加一条数据,可以接受字典类型数据 **kwargs obj = models.Tb1(c1='xx', c2='oo')obj.save()查
models.Tb1.objects.get(id=123) # 获取单条数据,不存在则报错(不建议)models.Tb1.objects.all() # 获取全部models.Tb1.objects.filter(name='seven') # 获取指定条件的数据models.Tb1.objects.exclude(name='seven') # 获取指定条件的数据删
改
2.Foreign key的使用原因
但是多表查询会降低速度,大型程序反而不使用外键,而是用单表(约束的时候,通过代码判断)
extra
extra(self, select=None, where=None, params=None, tables=None, order_by=None, select_params=None) Entry.objects.extra(select={'new_id': "select col from sometable where othercol > %s"}, select_params=(1,)) Entry.objects.extra(where=['headline=%s'], params=['Lennon']) Entry.objects.extra(where=["foo='a' OR bar = 'a'", "baz = 'a'"]) Entry.objects.extra(select={'new_id': "select id from tb where id > %s"}, select_params=(1,), order_by=['-nid'])F查询
from django.db.models import F models.Tb1.objects.update(num=F('num')+1)Q查询
方式一:
方式二:
exclude(self, *args, **kwargs)
select_related(self, *fields)
性能相关:表之间进行join连表操作,一次性获取关联的数据。
prefetch_related(self, *lookups)
性能相关:多表连表操作时速度会慢,使用其执行多次SQL查询 在内存中做关联,而不会再做连表查询
annotate(self, *args, **kwargs)
extra(self, select=None, where=None, params=None, tables=None, order_by=None, select_params=None)
reverse(self):
# 倒序 models.UserInfo.objects.all().order_by('-nid').reverse()# 注:如果存在order_by,reverse则是倒序,如果多个排序则一一倒序下面两个 取到的是对象,并且注意 取到的对象可以 获取其他字段(这样会再去查找该字段降低性能
defer(self, *fields):
only(self, *fields):
# 仅取某个表中的数据models.UserInfo.objects.only('username','id')或models.UserInfo.objects.filter(...).only('username','id')以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Django中的对象查询Django框架自带了ORM,实现了一些比较强大而且方便的查询功能,这些功能和表无关。比如下面这个例子:classQuestion(mo
ORM框架使用最广泛的就是SQLAlchemy和Django自带的ORM框架,但是SQLAlchemy的语法显然相对Django的ORM框架麻烦一点。而Djan
摘要在这篇文章里,我将以反模式的角度来直接讨论Django的低级ORM查询方法的使用。作为一种替代方式,我们需要在包含业务逻辑的模型层建立与特定领域相关的查询A
要用django的orm表达sql的exists子查询,是个比较麻烦的事情,需要做两部来完成fromdjango.db.modelsimportExists,O
1如何在做ORM查询时查看SQl的执行情况(1)最底层的django.db.connection在djangoshell中使用pythonmanage.pysh