ORM单表操作
1.类 --> 表
2.对象 --> 记录
3.属性 --> 字段
增
方式一: 通过类实例化对象
user = models.UserInfo(
name= 'dazhuang',
age= 18
)
user.save()
方式二: 通过类的控制器实例化对象
new_object--> models对象
models.userinfo.objects UserInfo类的控制器
new_obj = models.userinfo.objects.create(name='dong',age='16')
print(new_obj)
print(new_obj.name)
print(new_obj.age)
print(new_obj.current_date)
方式三:批量创建
obj_lst =[]
for i in range(20):
models.UserInfo(
name = 'xxx',
age = 18
)
obj_lst.append(i)
models.UserInfo.objects.bulk_create(obj_lst)
方法四 update or create 有就修改,没有就增加
models.UserInfo.objects.update or create(
name = '洪旭咩咩',
default ={
'age':18,
}
)
删 delete()
models.UserInfo.objects.get(id=3) 获取的是model对象
通过对象删除 models.UserInfo.objects.get(id=3).delete()
Query set 集合有多少数据删多少
models.UserInfo.objects.filter(id=3) 获取的是Query set 集合
Query set集合删除 models.userinfo.objects.filter(id=2).delete()
删除所有数据:
models.UserInfo.objects.all() 获取全部数据,也是Query set集合
models.userinfo.objects.all().delete();
改 update()
model对象不能使用update方法,只能Queryset 修改(查到多少改多少)
查 all(),filter() 返回值Query set
简单查询: 查询所有数据
方式一:
new_objects = models.userinfo.objects.all() 查询结果Query set集合 类似于列表
在models类中 写__str__ 方法,可以给model对象起别名
条件查询 返回的Query set集合 可以再调用filter方法
new_objs = models.userinfo.objects.filter(id = 2) 返回Query set集合,如果为空不报错
返回Query set[]
new_obj = models.userinfo.objects.get(id=2) 返回的是model对象 有且只有一个
为空,多条数据会报错
报错二:dose not exit
报错一 more than1
10亿条数据查100万条 ,用mysql的存储过程写个循环,循环区分度大的索引
filter 多条件查询
1.多条件传参 方式一 关键字传参,方式二 **{dict} 打散字典传参
方式一:
objs = models.userinfo.objects.filter(id=6,name='zyt1')
方式二:
objs = models.userinfo.objects.filter(**{'id':6,'name':'zyt1'})
exclude 排除 都可以调用 ,返回Query set
exclude(**kwargs) 排除 Query set集合 可以用objects控制器和Query set集合调用,返回Query set
控制器查询:
objs = models.UserInfo.objects.exclude(name='zyt3')
Queryset对象查询
objs = models.userinfo.objects.all().exclude(id=1)
order_by(*args) 排序Query set 调用 返回值Query set
Query set 调用,负号表示降序 返回 Query set集合
objs = models.userinfo.objects.all().order_by('age','-id')
reverse() 翻转 ,query set 调用,order_by后使用,返回值Query set
必须在排序之后使用 query set 调用,返回Query set集合
count() 计数 Query set 调用 返回数字
frist(),last() ,Query set调用 返回model对象
exists() query set 调用 效率高 返回值bool值
只拿一条来判断 有结果 True ,没结果 False
values_list() 都可以调用 返回值Query set
把每个记录打包成元组,
指定 数据字段 value_list('name','age');
values 都可以调用 返回值 Query set 返回形式字典
键:字段
值:数据
指定 数据字段 values('name','age')
Query set 调用 distinct 去重 指定字段 distinct('age') 返回Query set
models.userinfo.objects.all().distinct()
是对整条数据的去重,每个字段一样才算重复
只能针对 一个字段
models.userinfo.objects.values('age').distinct
常用在 values 和 values_list 后面
控制器 调用 filter(),all(),values(),values_list(),exclude
filter 补充
id__gt = 7 大于
id__gte =7 大于等于
id__lt = 7 小于
id__ite 小于等于7
id__in = [6,8,10],id为6,8,10
字段__range = [数据],相当于 between ... and ...
字段__contains = '数据' 字段包含数据的,只适用于字符串 name__contains = '妹妹' 区分大小写
字段__icontains = '数据' 不去分大小写
字段__startwith = '数据' 以...开头
字段__istartwith ='数据'
字段__endwith = '数据'
字段__iendwith = '数据'
字段__year = '2000' 2000年的数据 返回Query set
date__year = '2000',date__month ='2'
date__year = '2000',date__month = '2',date__day = '5'
date__year__gt ='2000',2000年以上
USE_TZ True,改为False