Django orm高性能优化和model操作

django的orm操作优化

1. 尽量不查对象,能用values就用values  使用values查询只执行了一条SQL,会自动连表查询

2. 在进行多对一,一对一查询添加select_related()方法,括号中是外键字段,会进行连表查询,通过减少SQL查询的次数来进行优化,提高性能。

3. 在进行多对一,多对多查询是可使用prefetch_related()方法

4. only()指定查询字段,查询时指定某些字段查询,使用only指定字段只会差我们需要的那个字段

5. defer()查询时指定排序某些字段和only相反,如果排除的字段,还要查会增加查询负担,当然查询指定字段之外的字段也会增加查询负担。

django查询之单表查询

model.table.objects.filter(id__lt=10,id__gt=1) # 获取id大于1 且小于10得值

model.table.objects.filter(id__in=[11,22,33]) #  获取id等于11,22,33的数据

model.table.objects.exclude(id__in=[11,22,33])  # not in

model.table.objects.filter(name__contains='ven') # 获取name字段包含ven 的
model.table.objects.filter(name__icontains='ven') # icontains 对大小写不敏感

model.table.objects.filter(id__range=[1,3])  # id 范围是1到3的

# 类似的关键字还有
startswith  查询以什么开头的
istartswith  忽略大小写
endswith  查询以什么结尾的
iendswith  忽略大小写的

model操作

1. 字段

AutoField()      int自增列,必须填入参数 primary_key=True

BigAutoField(AutoField)      bigint自增列,必须填入参数primary_key = True 

SmallIntegerField(IntegerField)     小整数

PositiveSmallInternetField     正小整数

IntegerField    整数列

PositiveInternetField  正整数

BigIntegerField   长整数

BooleanField    布尔值类型

NullBooleanField   可以为空的布尔值

CharField  字符串类型  必须提供max_length参数,max_length 表示字符长度

TextField  文本类型

EmailField   字符串类型      Django Admin以及ModelForm中提供验证机制

IPAddressField 字符串类型,Django Admin 以及ModelFrom提供验证IPV4 机制

GenericIPAddressField 字符串类型   Django Admin 以及ModelFrom提供验证IPV4 和 IPV6 机制

URLField  字符串类型  Django Admin以及ModelForm中提供验证URL

SLugField   字符串类型, Django Admin 以及ModelForm 中提供验证支持字母,数字,下划线,连接符

CommaSeparatedIntegerField 字符串类型格式,必须为逗号分割的数字

UUIDField  字符串类型,Django Admin以及ModelForm中提供UUID格式的验证

FieldPathField 字符串  django Admin以及ModelForm中提供读取文件夹下的功能    参数  : path ,文件夹路径, match=None,正则匹配  , recursive=False  递归下面的文件夹   allow_files = True ,允许文件, allow_folders = False  允许文件夹

FileField   字符串,路径保存在数据库,文件上传到指定目录     参数 upload_to = ''  上传文件的保存路径,storage = None 存储组件,默认django.core.files.storage.FileSystemStorage

ImageField   字符串,路径保存在数据库,文件上传到指定目录   参数 upload_to = ''  上传文件的保存路径,storage = None 存储组件,默认django.core.files.storage.FileSystemStorage    width_field=None, 上传图片的高度保存的数据库字段名,  height_field = None 上传图片的宽度保存的数据库字段名

DateTimeField  日期+ 时间格式  

DateField   日期格式

TimeField   时间格式

DurationField   长整数,时间间隔,数据库中按照bigint存储,ORM中获取的值为datetime.timedelta类型

FloatField  浮点数

DecimalField  10 进制小数

BinaryField    二进制类型

2020年上半年  沙雕搞笑锦集 

1.  听信网络上“日用品断货”谣言 ,香港3男子持刀抢劫600余卷厕纸

2.  美国男孩误吞AirPod无线耳机,不敢离手机太近,担心耳机在胃里播放音乐

3.  常州一男子为寻求刺激,先后四次裸体卧轨,称其最后关头躲开火车时,得到了前所未有的快感 

4.  郑州一女子因疫情坚持不外出,后来为防感染去药店买双黄连,结果在药店被感染

5. 佛山一男子在街上,抢夺一女子的手机,旁边几米外派出所里的值班民警,立即冲向疑犯,仅48秒就将疑犯抓获

字段参数

  1. null     数据库中的字段是否为空
  2. db_column     数据库中字段的列名
  3. default     数据库中字段的默认值
  4. primary_key    数据库中的字段是否为主键
  5. db_index     数据库中字段是否可以建立索引
  6. unique     数据库中字段是否可以建立唯一索引
  7. verbose_name    在Admin中显示的字段名称
  8. blank   Admin中是否允许用户输入为空
  9. editable    Admin 中是否可以编辑
  10. help_text     Admin中该字段的提示信息
  11. choices   Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作。
  12. error_messages   自定义错误信息,从而顶定制想要显示的错误信息
  13. validators    自定义错误验证,从而定制想要的验证规则

2020年上半年  沙雕搞笑锦集 

  1.  男子不顾民警劝阻围观车祸现场,称“我的命我有数”,结果几分钟后被来往车辆撞骨折
  2. 上海一位母亲辅导儿子写作业,气得跳河轻生,面对救援时竟称“,不要救我,我真的太累了”
  3. 泰国一女子因心情不好轻生跳河,由于太会游泳无法成功,只好边哭边游、又游了回来

  4. 南京一名年轻男子落水,因为觉得人太多不好意思呼救,在湖里漂流两天才被警方救起

  5. 杭州一公司组织徒步越野赛,为防抄近路作弊,规定没收手机只带一张地图,结果18人被困山上

元信息

在model中有一个meta的类:

# 数据库中生成的表名称 默认 app名称+下划线+类名

db_table = 'tuble_name'

# 联合索引  index_together = {("pub_date":"deadline")}

# 联合唯一索引   unique_together = (('driver':'restaurant'))

# admin 中显示的表名称

verborse_name

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值