Django--字段类型、字段属性、元数据、查询数据、修改数据、删除数据、一对多关系搭建

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_44863429/article/details/100748007

ORM模型

字段类型

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

字段属性

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

元数据

db_table  修改表的名字
verbose_name  备注,站点管理中用于显示模型名字为中文
verbose_name_plural  显示复数名称
ordering=['-age','id','name'] 排序(多条件) 

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

查询

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)
    

2.get()方法

  • 返回一个对象

  • 返回结果有且只有一条,get后面通常写主键

    # get 方法
        data = Person.objects.get(id=1)
        print(data.name)
        print(data.age)
    

3.filter()方法,类似于sql中的where

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

4.first()方法

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

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

data = Person.objects.filter(name='zhangsan').first()
    print(data)
    
data = Person.objects.filter(name='zhangsan').last()
    print(data)

5.exclude()

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

data = Person.objects.exclude(name='zhansan')
   print(data)

Queryset

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

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

  • all()
  • filter()
  • order_by()

特性:

  • 惰性
    • 创建好查询集之后不会立即执行,在使用的时候才会进行数据的查询
  • 缓存
    • 使用一个查询集,第一次使用进行查询,然后将数据进行缓存,之后再使用该查询集不会再次发起查询,而是将查询到的结果缓存了下来

使用如下方法返回对象

  • get()
  • first()
  • last()
# reverse 对查询结果反向排序   逆序
    # 这个方法通常放在有排序的查询集  后面使用
    # 排序: order_by  或者 模型类中的class Meta 中使用ordering = []
    # data = Person.objects.order_by('-id').reverse()
    # print(data)


# values  返回的是一个queryset 内容不是实例对象,而是具体数据的字典
    # data = Person.objects.filter(name='zhangsan').values()
    # print(data)


# count 返回的是符合当前条件的数据的条数
    # data = Person.objects.filter(name='zhangsan').count()
    # print(data)

# exists  返回是True或者False    判断是否存在
    # data = Person.objects.filter(name='zhangsan').exists()
    # print(data)

# 切片
    data = Person.objects.order_by('id')[0:2]
    print(data)

修改数据

# save
    # 先查询到数据,然后进行重新赋值,然后执行save进行保存
    # data = Person.objects.get(id=2)
    # data.name = 'python'
    # data.save()

    # data = Person.objects.filter(name='lisi').all()
    # for one in data:
    #     if one.id == 3:
    #         one.age = 22
    #     else:
    #         one.age = 23
    #     one.save()

    # update
    Person.objects.filter(id=2).update(name='java')

双下划线查询

# lt 小于
    # data = Person.objects.filter(id__lt=4)
    # print(data)
    # gt 大于
    # data = Person.objects.filter(id__gt=4)
    # print(data)
    # lte 小于等于
    # data = Person.objects.filter(id__lte=4)
    # print(data)
    # gte 大于等于
    # data = Person.objects.filter(id__gte=4)
    # print(data)
    # in  包含
    # data = Person.objects.filter(id__in = [1,2,3])
    # print(data)
    # exclude  不包含

    # range 范围
    # data = Person.objects.filter(id__range=[1, 5])
    # print(data)
    # startswitch   像like j%
    data = Person.objects.filter(id__startswith='j')
    print(data)
    # endswitch   像like %j
    
    # __contain  包含  大小写敏感
    data = Person.objects.filter(name__contains='w')
    print(data)
    
    # __icontains  包含  大小写不敏感
    data = Person.objects.filter(name__icontains='w')
    print(data)

删除

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

关系搭建–一对多

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44863429/article/details/100748007