版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
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()