【Django-03】模型常用的增删改查
2023-12-13 13:49:37
class Grade(models.Model):
id = models.AutoField(verbose_name='自增id', name="id", primary_key=True)
grade_name = models.CharField(verbose_name="班级名称", name="grade_name", max_length=200)
create_time = models.DateTimeField(verbose_name='创建时间',name="create_time", auto_now_add=True) # 第一次赋值
update_time = models.DateTimeField(verbose_name='最后一次更新时间',name="update_time", auto_now=True) # 第二次赋值
class Meta:
db_table = "app_grade"
ordering=["-update_time","create_time"]
QuerySet 对象
表示查询集,是从数据库中获取到的Model集合,集合中每个元素都是我们的Model对象
all()
queryset=Grade.objects.all()
for grade in queryset:
print(grade.crade_name)
filter()
类似于sql中的where
queryset=Grade.objects.filter(grade_name ='三班')
for grade in queryset:
print(grade.crade_name)
get()
返回符合要求的一条数据,只返回一条,当未找到数据或者是返回的数据超过一条都会抛出异常,因此需要做异常捕捉处理。一般查询条件用主键id,这唯一对应一条数据。
grade=Grade.objects.get(id=1)
print(grade.crade_name)
exclude()
排除符合条件的值
grade=Grade.objects.exclude(grade_name ='三班')
for grade in queryset:
print(grade.crade_name)
values()
指定返回的列,相当于 select grade_name create_time from student.
返回的对象包含的数据类型是 指定表列的字典dict结构,所以代码中取值略有不同
grade=Grade.objects.values('grade_name','create_name')
for grade in queryset:
print(grade["crade_name"])
distinct()
一般结合values用
grade=Grade.objects.values('grade_name').distinct()
for grade in queryset:
print(grade["crade_name"])
支持的表达式
上面的查询都是用的 ‘=’ ,其实还支持的表达式有:
__gt
__gte
__lt
__lte
__in
__contains
__year
__month
__day
组合使用
一些基础的组合是可以链式调用的,不必那么死板。
grade=Grade.objects.filter(id__in=(1,3,4)).filter(name__contains='张')
for grade in queryset:
print(grade.name)
创建数据
save和create都行
grade=Grade()
grade.grade_name='四班'
grade.save()
# 或者
grade = {"grade_name": '四班'}
Grade.objects.create(**grade)
更新数据
可以用save或者update函数。 逻辑很简单:先查出来数据,再对查出来的对象修改之后再保存进去即可。
-
基础写法
grade=Grade.objects.get(id=1) grade.grade_name='四班' grade.save()
-
链式写法
grade=Grade.objects.get(id=1).update(garde_name='四班')
-
批量更新
grade=Grade.objects.update(garde_name='四班')
删除数据
- 删除单行
grade = Grade.objects.get(id=1) grade.delete()
- 删除多行
d = Grade.objects.filter(garde__contains='四').delete() print(d)
- 删除全部
d = Grade.objects.all().delete()
如果删除的数据中有外键,且on_delete 参数值为 CASCADE 则外键关联 主表 中的数据也会被删除
文章来源:https://blog.csdn.net/qq_36066039/article/details/134671800
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!