Django(十一):ORM单表操作

ORM单表操作:  views.py里面
from models import *

t = Table() # 表单对象model是一个表记录, model只有attrssave()
manager = Table.objects # 表单的一个类属性是一个Manager对象, 用于管理表记录对象model

1. 增加记录
1>. 方式一: 创建表记录对象, 并添加
t = Table(**info)
t.save # 此时才会提交到数据库
2>. 方式二: 通过Manager对象添加
Table.objects.create(**info) # 直接提交到数据库

2. 查询表记录: 通过manager操作
QuerySetmodel的集合对象: 1) 可迭代
2) 可切片
3) 不会马上执行, 运行时执行, 并将数据存入QuerySet内置的cache
4)再次执行时从cache中拿数据
* 只需要判断数据有无, .exist()方法
* 当读取数据特别大时, .iterator()方法, 但数据不会存入cache
* 对于常用的数据, 存入cache; 不常用的用iterator()

.all() # SELECT * FROM Table, 查询全部, 返回QuerySet
.filter(**kwargs) # SELECT * FROM Table Where condition, 条件查找, 返回QuerySet
.get(**kwargs) # , 只能查找一个, 有多个或没有则报错, 返回model, 没有数据处理的方法

condition:
* 原始django_orm只有与',' 没有或非 ---> 引入Q查询
* from django.db.models import Q
* Q(condition) 封装过的条件可以有 & | ~
* Q查询可以与原始查询一起使用, 但一定要放在最前面

>a # field__gt = a
<a # field__lt = a
>=a # Q(field__gt=a) | Q(field=a)
<=a # Q(field__lt=a) | Q(field=a)
between a and b # field__range=[a,b]
in (a,b,c) # field__in=[a,b,c]
like= '%a%' # field__contains=a, 区分大小写; field_icontains=a, 不区分大小写
正则 # field__regex = r'', 区分大小写; field_iregex= r'', 不区分大小写

其他双下划线方法: __startswith, __istartswith, __endswith, __iendswith

/***************** 查询后的数据处理 *************************************/
.values(*field) # SELECT field,field2,.. 返回一个ValueQuerySet集合, 且每项是一个{field:value,}字典
.values_list(*field) # 每项是一个(value1,value2,)元组
// 去重
.distinct() # SELECT DISTINCT..
// 排序
.order_by(*field) # .. ORDER BY field1,.. 升序
.order_by(-*field) # 降序
.order_by(*field).reverse() # 反转
// 聚合
from django.db.models import Avg, Min, Max, Sum, Count
.aggregate(Avg('field'))
// 分组聚合
.values(*field).annotate([my_name]=Avg('field2')) # SELECT field1, field2, Avg(field) FROM Table GROUP BY field2

其他处理方式: .count() # 计数
.first(), .last() # 取第一个或取最后一个
.exist() # 若查找存在数据则返回True, 判断数据是否存在可用, 不需要读取全部数据, 不会放入cache
.defer('field') # 排除某列数据
.only('field') # 仅取某列数据
.using('defualt1') # 连接不同的数据库
当需要对整个field操作时
from django.db.models import F
manager.update(num=F('num')+1) # 包装field, 使其可以被调用

转载于:https://www.cnblogs.com/lancelotxly/p/10871904.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值