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)