Python的orm操作
好久不用orm操作了,今天整理了一下,总结出来方便以后使用的时候直接看
model里面的数据表
1 from django.db import models 2 3 class Role(models.Model): #角色表 4 role_name = models.CharField(max_length=32, unique=True) #角色名称 5 class Meta: 6 db_table = "pp_role" 7 8 class Classroom(models.Model): 9 class_name = models.CharField(max_length=32,verbose_name="班级名称",unique=True) #班级名次 10 address = models.CharField(max_length=32,null=True) #班级地址 11 class Meta: 12 db_table = "pp_class" 13 14 15 class User(models.Model): 16 username = models.CharField(max_length=32,verbose_name="姓名") #用户名 17 age =models.IntegerField(verbose_name="年龄") 18 home = models.CharField(verbose_name="家乡",null=True,max_length=32) 19 hight = models.IntegerField(verbose_name="身高",null=True) 20 21 #多对多 22 roles = models.ManyToManyField(Role) 23 24 #一对多 25 classrooms = models.ForeignKey(Classroom,on_delete=models.CASCADE,null=True) 26 27 class Meta: 28 db_table="pp_user"
基本获取数据的操作
User.objects.get(id=1) #获取ID为1的数据 User.objects.all(age=18) #获取年龄为18的所有数据 User.objects.count(age=18) #统计有多少年龄为18
更改数据
#更改数据 user = User.objects.filter(id=1).first() user.username = '你大爷' user.save() # 这种更改方式也行 User.objects.filter(id=1).update(age=10)
数据的删除
#删除数据 user = User.objects.filter(id=1) user.delete() # 这种删除方式也行 User.objects.filter(id=1).delete()
模糊查询: a.contains 是否包含 book = BookInfo.objects.filter(btitle__contains='记') #查询结果包含‘记’的 b.startswith,endswith 以指定值开头或结尾 book = BookInfo.objects.filter(btitle__startswith='西') #查询以‘西’开头的 book = BookInfo.objects.filter(btitle__endswith='记') #查询以‘记’结尾的 空查询: isnull 是否为空 book = BookInfo.object.filter(bititle__isnull=Flase) #查询bititle不为空 范围查询: in 在范围内 range 相当于between...and... book = BookInfo.object.filter(id__in = [1,5,13,24]) #查询id为1或5或13或24 book = BookInfo.object.filter(id__range = [10,20]) #查询范围为10-20的id 比较查询: gt 大于 gte 大于等于 lt 小于 lte 小于等于 exclude 不等于 book = BookInfo.object.filter(id__gt =10) #查询id大于10的 book = BookInfo.object.exclude(id = 10) #查询id不等于的10的 日期查询 year、month、day、week_day、hour、minute、second:对日期时间类型的属性进行运算。 book = BookInfo.object.filter(bpub_date__year = 1977) #查询1977年出版的书 book = BookInfo.object.filter(bpub_date__gt =date(1977,1,1)) #查询1977年1月1日以后出版的书 F对象和Q对象 比较两个字段对象之间的关系用F对象。(F对象可以进行运算) book = BookInfio.Object.filter(bread__gte=F('bcomment')) #查询阅读量等于评论量的对象 book = BookInfio.Object.filter(bread__gte=F('bcomment') * 2 ) 与逻辑运算符连用使用Q对象。 或( | ) 与( & ) 非( ~ ) book = BookInfo.Object.filter(Q(bread__gte=20) | Q(pk__lt=3)) #查询阅读量为20或者id为3的对象 聚合函数 使用aggregate()过滤器调用聚合函数。聚合函数包括:Avg 平均,Count 数量,Max 最大,Min 最小,Sum 求和 book = BookInfo.Object.aggregate(Sum('bread')) #求阅读量的和 排序 使用order_by对结果进行排序 book=BookInfo.object.all().order_by('bread') #按阅读量的升序排列 book=BookInfo.object.all().order_by('-bread') #按阅读量的降序排列