Django(四): ORM操作、数据库查询(all get filter order by enclude Queryset)修改和删除

ORM操作

字段类型

CharField   varchar类型,需要指定长度
IntegerField     整形
DecimalField     浮点型  需要指定最大长度和小数点位数
DateField      日期   datetime
ForeignKey    做外键
    # to 设置关联表
    # to_field 关联表要关联的键名,默认为关联表中的id,可以不写
    # on_delete 当删除关联表中的数据的时候,从表做什么行为,
        # CASCADE  当关联表中数据删除的时候,外键所在表中的数据也会被删除
        # SET_NULL  当关联表中数据删除的时候,外键所在表中的外键设置为空
        # SET_DEFAULT  当关联表中数据删除的时候,外键所在表中的外键设置一个默认值
        # PROTECT 关联保护,当关联表的数据被删除的时候,报异常,
        # DO_NOTHING  当关联表中数据删除的时候,外键所在的表不做任何事情

字段属性

max_length 最大长度
verbose_name  备注,站点管理中用于显示字段为中文
max_digits   浮点型最大长度
decimal_places  小数点位数
auto_now = True 获取的是当前时间
null = True    可为空,默认是不为空

元数据

db_table 修改表的名字
verbose_name  备注,站点管理中用于显示模型名字为中文,会出现s
verbose_name_plural  显示复数名称
ordering= ['-age']  指定排序

单表操作

增加

save 方法

create方法

查询

1. all()

  • 返回一个 queryset 一个列表

  • 返回符合条件的所有数据

  •     # all 方法
        date = Person.objects.all()
        # print (date)
        # print (date[0].name)
        # print (date[0].age)
        # print (date[0].height)
        for one in date:
            print (one.height)
            print (one.name)

get方法

 

  • 返回是一个 对象
  • 返回结果有且只有一条,get后面的条件常用主键
  • # get 方法
        data = Person.objects.get(id=1)
        print (data.name)
        print (data.age)

 

filter 方法,类似于sql中的 where

  • 返回值: queryset
  • 使用遍历或者下标提取属性的值
  • # filter 方法
        data = Person.objects.filter(name="zhangsan")
        print (data)

first方法 和last 方法

first 返回一个对象,返回符合条件的第一条数据(对象)

last 返回一个对象,返回符合条件的最后一条数据(对象)

data = Person.objects.filter(name="zhangsan").first()
print (data.age)

data = Person.objects.filter(name="zhangsan").last()
print(data.age)

order by

    # 升序
    # data = Person.objects.all().order_by("age")
    # 降序
    data = Person.objects.all().order_by("-age")
    for one in data:
        print (one.age)
    data = Person.objects.all().order_by("age","-name")

exclude()

返回一个quertset,查询集,包含了跟给定条件不符合的所有数据

  data = Person.objects.exclude(name="zhangsan")
  for one in data:
      print (one.name)

Queryset

查询集,不是python列表,也叫结果集,表示从数据库中获取的一个对象集合

使用如下的方法的时候返回:

  • all()
  • filter()
  • order_by()
  • exclude()
  • values 特殊的queryset
  • 切片

特性: 

惰性:创建好查询集之后不会立即执行,在使用的时候才会进行数据的查询,

缓存:使用一个查询集,第一次使用进行查询,然后将数据进行缓存,之后再使用该查询集不会再次发起查询,而是将查询到的结果缓存了下来

使用如下方法返回对象 :

get()

first()

last()

     # values   queryset [duixiang,duixiang,duixiang]
    # 返回的是一个queryset 内容不是实力对象,而是具体数据的字典
    # data = Person.objects.filter(name="zhangsan").values()
    # print (data)
    # count 返回的是符合当前条件的数据的条数
    # data = Person.objects.filter(name="zhangsan").count()
    # print (data)

    # exists 返回一个 True或者Flase  判断是否存在
    # data = Person.objects.filter(name="libai").exists()
    # print (data)
    #
    # 切片  
    data = Person.objects.order_by("id")[2:5]
    print (data)

修改

    # save  注意:拿到的结果是对象还是查询集合
    #  先查询到数据,然后进行重新赋值,然后执行save 进行保存
    # data = Person.objects.get(id=2)
    # data.name = "python"
    # data.save()
    # data = Person.objects.filter(name="wangwu").all()
    # for one in data:
    #     if one.id == 4:
    #         one.age=21
    #     else:
    #         one.age = 23
    #     one.save()
    # update
    Person.objects.filter(id=2).update(name="java")

删除

# delete方法
Person.objects.filter(id=7).delete()

双下划线查询

    # __lt 小于
    # data = Person.objects.filter(id__lt=3)
    # print (data)
    # gt  大于
    # data = Person.objects.filter(id__gt=3)
    # print (data)
    # gte 大于等于
    # data = Person.objects.filter(id__gte=3)
    # print (data)
    # in 包含  select * from stu where id in (1,2,3,4);
    # data = Person.objects.filter(id__in = [1,2,3])
    # print (data)
    # exclude 不包含
    # range 范围
    # data = Person.objects.filter(id__range = [1,5])
    # print (data)
    #  startswith   像 like j%   endswith  像 %j
    # data = Person.objects.filter(name__startswith="j")
    # print (data)
    #  endswith
    #  __contains 包含  大小写敏感
    data = Person.objects.filter(name__contains="w")
    print (data)
    #   __icontains  包含,大小写不敏感
    data = Person.objects.filter(name__icontains="w")
    print(data)

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值