Django(四)-Django增删查改语句

Django(四)-Django增删查改语句

一、数据库的增加

create()方法

语法: 模型名.objects.create(字段1=值1, 字段2=值2 …)

例如:Student.objects.create(s_name=‘小明’)

save()方法

save()方法是一个比较特殊的方法,可以进行增、改、查,使用的时候也很方便,例如:

# 1、先创建对象
stu = Student()
# 2、给对象对应字段赋值
stu.s_name = '小明1'
stu.s_gender = 1
# 3、保存
stu.save()

可见这个方法是很灵活的,查询以及更新后面对应的地方进行讲解。

二、数据库的删除

delete()方法

语法: 模型名.objects.filter(条件).delete()

例如:Student.objects.filter(id=2).delete()

注意:删除的时候,在Django中删除的是对象,对应数据库中是删除这个字段一行的数据。(不是删除整个表)

三、数据库的更新

update()方法

语法: 模型名.objects.filter(条件).update(字段1=值1, 字段2=值2 …)

例如:Student.objects.filter(id=4).update(s_name=‘小明’)

save()方法

与创建时的save()方法类似,但是在获取对象的时候,创建是直接创建一个新的对象,而更新是通过条件获取相应条件的对象,后对对应对象进行相应的处理。例如:

# 1、获取所需对象
stu = Student.objects.filter(id=4).first()
# 2、进行处理
stu.s_age = 18
# 3、保存
stu.save()

注意:这个例子中取出来的对象是object类型,不能直接使用,需要通过“.first()”方法将对象取出来。

四、数据库的查询

众所周知,在数据库的相关操作中,查询的操作将远远多于其他三个操作,所以,查询语句是非常重要的,下面就记录一些我在学习Django中使用过的一些方法。

filter()方法

语法:模型名.objects.filter(条件)

例如:stu = Student.objects.filter(id=5).first()

filter()方法是用得非常多的方法,在使用的时候稍稍注意一下就行,主要也是不要写错单词。

all()方法

语法:模型名.objects.all()

例如:stus = Student.objects.all()

这个方法在使用后返回的是整个数据库中所有的元素的信息,以列表的方式返回。

get()方法

语法:模型名.onjects.get(条件)

例如:stu = Student.objects.get(id=5)

注意:get()方法是查询指定的条件的对象,返回时只返回唯一的一个对象,并且查询的条件必须成立,否则报错。(不建议使用)

exclude()方法

语法:模型名.objects.exclude(条件)

例如:stus = Student.objects.exclude(s_gender=0)

exclude()方法作用为查询出不满足条件的信息,返回的是一个列表。

order_by()方法

语法:模型名.objects.order_by(字段)

例如:stus = Student.objects.order_by(‘id’)

注意:当括号中的字段为“正”时,表示为升序,为“负”时,表示为降序,即示例中以id字段进行排序,当为"id"时,表示以id的升序排序,当为"-id"时,表示以id的降序排序。

values()方法

语法:模型名.objects.(filter等查询条件).values(字段)

例如:stus = Student.objects.all().values(‘s_name’)

values()方法主要是取出查询对象中指定的字段,该方法在优化查询时的效果较好,推荐在查询部分字段时使用该方法。

exists()方法

语法:模型名.objects.(filter等查询条件).exists()

例如:a = Student.objects.filter(s_name=‘小张’).exists()

exists()方法主要是判断查询的数据是否存在,存在时返回True,否则返回False。

count()方法

语法:模型名.objects.(filter等查询条件).count()

例如:stus = Student.objects.filter(s_gender=1).count()

count()方法,顾名思义,查询符合条件的数据的条数,在计算数据数时比较实用。

filter()方法中的一些属性

contains属性

contains:主要作用是进行模糊查询,查询包含某个或多个字符的数据

语法:字段__contains

例如:stus = Student.objects.filter(s_name__contains=‘小明’) - 查询出来的结果为s_name字段中包含“小明”的所有数据。

startswith属性

startswith:也是模糊查询,但是与contains不一样的是startswith是查询以某个或多个字符开始的数据,包含完全匹配的字段

语法:字段__startswith

例如:stus = Student.objects.filter(s_name__startswith=‘小’)- 表示查询字段s_name以“小”开头的所有数据。

endswith属性

endswith::模糊查询,表示以某个或多个字符结束的数据,包含完全匹配的字段

语法:字段__endwith

例如:stus = Student.objects.filter(s_name__endswith=‘明’)- 表示以s_name字段中以”明“结尾的所有数据。

in属性

in:表示包含在什么之内。

语法:字段__in

例如:stus = Student.objects.filter(id__in=[1, 2, 3, 4, 5, 6, 7, 8])- 表示id字段的内容为”1, 2, 3, 4, 5, 6, 7, 8“中的一个时,将这个数据取出。

注意:当查询的字段为主键时,可以用pk表示这个字段,即当示例中的id为主键时,可以用一下查询语句表示:stus = Student.objects.filter(pk__in=[1, 2, 3, 4, 5, 6, 7, 8]),查询结果将与示例中的结果一样。

比较运算符

filter()方法中的比较运算符总共有:gte、lte、gt、lt四个:

属性作用
gte大于等于,语法:字段__gte
lte小于等于,语法:字段__lte
gt大于,语法:字段__gt
lt小于,语法:字段__lt

例如:stus = Student.objects.filter(s_age__gte=18, s_age__lt=20)- 表示查询s_age字段大于等于18且小于20的所有数据。

stus = Student.objects.filter(s_age__gte=18).filter(s_age__lt=20)- 这种写法的结果与上面的结果一样,只是写法不同。

聚合操作

聚合操作主要是求和、求差、求最大、求最小、求平均等,但是在Django中需要对这个关键字进行导包,导包语句:from django.db.models import Avg, Max, Min, Sum, Count

例如:

# 求数据库中所有数据某个字段的平均值:

age_avg = Student.objects.all().aggregate(Avg(‘s_age’))

# 求数据库中所有数据某个字段的和:

age_sum = Student.objects.all().aggregate(Sum(‘s_age’))

逻辑运算

逻辑运算主要就是三个:与、或、非。

运算使用方式
与(且)使用&将各个条件连接起来:Q(条件1) & Q(条件2)或Q(条件1), Q(条件2),可以不用写时默认为且操作
使用
在条件前添加~: ~Q(条件)

例如:

# 求s_age大于等于18且小于20的所有符合的数据:

stus = Student.objects.filter(Q(s_age__gte=18) & Q(s_age__lt=20))

# 求s_age大于等于18或小于20的所有符合的数据:

stus = Student.objects.filter(Q(s_age__gte=18) | Q(s_age__lt=20))

# 求s_age不小于18的所有符合的数据:

stus = Student.objects.filter(~Q(s_age__gte=18))

将两个字段进行匹配(F()):

示例:查询物理成绩大于数学成绩的学生

stus = Student.objects.filter(physics__gt=F(‘math’))

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值