Django——数据库2

添加数据

# 添加数据
# 1、使用create方法
# data = Students.objects.create(name='阿宸' , age=26 , gender='2' , height=1.79)
# 2、直接写入数据 , 写入完之后 , 必须使用save方法保存
data = Students(name='叶鹏飞' , age= 19 , gender='2' , height=1.75)
data.save()
data = Students(name='张迦博' , age= 22 , gender='2' , height=1.76)
data.save()
data = Students(name='注定' , age= 21 , gender='2' , height=1.77)
data.save()
data = Students(name='老黄' , age= 18 , gender='2' , height=1.80)
data.save()
data = Students(name='谢翔' , age= 20 , gender='2' , height=1.75)
data.save()

数据查询

# 查询数据
# select * from students
# 使用all() 方法 , 会返回数据表中多有数据。
# 返回一个QuerySet列表 , 列表中会将表中的每一行数据作为一个对象进行返回
data = Students.objects.all()
# print(data)
# 获取到对象数据for循环
for d in data:
    print(d.name , d.age , d.gender)
    # 获取到选项字段对应的数据: get_字段名_display()
    print(d.get_gender_display())
# values 、 values_list()
# 获取到返回对象的具体数据内容
# values 返回的是每个字典对象的数据内容
# data = Students.objects.all().values()
# print(data)
# values 返回的是每个元组对象的数据内容
data = Students.objects.all().values_list()
print(data)


# 排序:order_by() , 默认情况是升序排序
data = Students.objects.order_by('age')
for i in data:
    print(i.age)
# 降序排序在指定的属性名前面加上 '-'
print('*'*10)
data = Students.objects.order_by('-age')
for i in data:
    print(i.age)

# 反转:reverse() , 使用这个方法之前必须先排序
print('反转之后是情况')
data = Students.objects.order_by('age').reverse()
for i in data:
    print(i.age)

筛选数据

# 筛选数据
# filter()  相当于sql中的where
# data = Students.objects.filter(age=20)
# print(data.values())
# exclude() 返回不是指定字段的内容
# 与filter相反
data = Students.objects.exclude(age=20)
print(data.values_list())

返回单条数据

# 获取单行数据 get()
# get指定的条件在表字段中必须是唯一的 , 否则会抛出异常
data = Students.objects.get(id=7)
print(data.name , data.age , data.get_gender_display())

条件筛选

# 条件筛选
# 条件筛选时 , 字段名__条件=()
# exact()
data = Students.objects.filter(name__exact='阿宸')
print(data.values())

# _:匹配一个字符 %:匹配0个或者多个字符
# contains() , 相当于SQL中%
data = Students.objects.filter(name__contains='鹏')
# print(data.values())
# query是获取到对应操作的SQL语句
print(data.query)

# in 匹配指定的数据内容
# age = 20,21,22
data = Students.objects.filter(age__in=[20,21,22])
print(data)

# 大于gt或者大于等于gte
data = Students.objects.filter(age__gt=22)
print(data)
data = Students.objects.filter(age__gte=22)
print(data)

# 小于lt 小于等于lte
data = Students.objects.filter(age__lt=19)
print(data)
data = Students.objects.filter(age__lte=19)
print(data)

# between 19 and 26
# range(19,26) ,在django数据库中是可以取到最后一位的
data = Students.objects.filter(age__range=(19,26))
print(data)
for d in data:
    print(d.age)
    
# 匹配开头 startswith  相当于sql中: 阿%
data = Students.objects.filter(name__startswith='阿')
print(data)
# 匹配结尾的 endswith  %飞
data = Students.objects.filter(name__endswith='飞')
print(data)

数据修改

# 数据修改
# 要先获取去要修改的数据行 , 然后再进行修改
data = Students.objects.get(id=1)
# 使用返回的对象.属性进行赋值
data.age=27
# 这种方式一定要对数据进行保存
data.save()

# 使用update 可以修改一到多行数据
# 使用update修改是 , 查询的语句要使用filter
data = Students.objects.filter(id=5)
data.update(name='皮卡丘')

data = Students.objects.filter(id__in=[3,6])
data.update(name='东野圭吾')
# count() 获取数据条数
data = Students.objects.count()
print(data)
data = Students.objects.filter(id__in=[3, 6])
print(data.count())
# len 获取数据条数
data = Students.objects.all()
print(data)
print(len(data))

# 对返回的数据对象切片
data = Students.objects.all()[:2]
print(data)

删除数据

# 数据删除
# delete 删除数据
data= Students.objects.get(id=1).delete()
print(data)
data = Students.objects.all().delete()
print(data)
# & and 并且
data = Students.objects.filter(name='阿宸') & Students.objects.filter(age=26)
print(data)
data = Students.objects.filter(name__contains='飞'  , age__gt=18)
print(data)

# | or 或者
data = Students.objects.filter(name__contains='飞') | Students.objects.filter(age__gt=18)
print(data)

# 使用Q对象 使用操作&以及|。
from django.db.models import Q
# Q 对象中的参数是字段的条件数据
data = Students.objects.filter(Q(name__contains='飞') & Q(age__gt=18))
print(data)

data = Students.objects.filter(Q(name__contains='飞') | Q(age__gt=18))
print(data)

# 获取到age不等于22
data = Students.objects.filter(~Q(age=22))
print(data)