ORM单表操作

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


 

posted @ 2021-04-15 10:59  苦行僧冬*婷  阅读(68)  评论(0)    收藏  举报