模型查询+过滤器

模型查询

查询集表示从数据库获取的对象集合,查询集可以有多个过滤器,过滤器就是一个函数,基于所给的参数限制查询集结果,创建查询集不会带来任何数据的访问,直到调用数据时,才会访问数据。

创建学生模型

class Student(models.Model):

        s_name = models.CharField(max_length=10,unique=True) # 指定学生名唯一

        s_age = models.IntegerField() # 学生姓名

        s_gender = models.BooleanField(default=True) # 学生性别默认为True

        isDelete = models.BooleanField(default=false) # 设置逻辑删除字段

        grade = models.ForeignKey(Grade) # 关联班级

        class Meta:

                db_table = 'student' # 指定表名

                ordering = ['id'] # 以id排序

        def __str(self)__:

                return self.s_name # 查询集的返回显示学生姓名

 

class StudentManager(models.Manager):

        def get_queryset(self):

                return super(StudentsManager,self).get_queryset().filter(isDelete=False) # 自定义模型管理器,重写父类get_queryset()方法,过滤查询集

创建班级模型

class Grade(models.Model):

        g_name = models.CharField(max_length=10,unique=True) # 创建班级名指定唯一

 

        class Meta:

                db_table = 'grade'

                ordering = ['id']

        def __str(self)__:

                return self.g_name

创建课程模型

class Course(models.Model):

        c_name = models.CharField(max_length=10) # 课程名

        start_date = models.DateField(auto_now_add) # 开课日期

        end_date = models.DateField(auto_now_add) # 结束日期

        stu = models.ManyToManyField(Student)

        class Meta:

                db_table = 'course'

                ordering = ['start_date']

        def __str(self)__:

                return self.c_name

创建学生信息模型

class StudentInfo(models.Model):

        phone = models.IntegerField() # 手机号

        address = models.CharField(max_length=20) # 地址

        stu = OneToOneField(Student)

        class Meta:

                db_table = 'studentinfo'


过滤器

Student.objects.all() # 返回查询集中的所有数据

Student.objects.filter(pk=3) # 返回符合条件的数据

Student.objects.filter(s_age=20).filter(s_gender=True) # 满足两种条件的查询方式一 Studen.objects.filter(s_age=20,s_gender=False) # 满足两种条件的查询方式二

Studen.objects.exclude(s_name='tom') # 过滤掉符合条件的数据,查询不满足条件的其他数据

Studen.objects.order_by('s_age') # 以年龄排序,升序

Studen.objects.order_by('-s_age') # 以年龄排序,降序

Studen.objects.values() # 将所有对象及属性返回

Studen.objects.values('s_name') # 返回所有对象的名字

返回单个数据

Studen.objects.get(pk=1) # 返回一个满足条件的对象,如果没有找到符合条件的对象,会引发"模型类.DoesNotExist"异常,如果找到多个对象,会引发"模型类.MultipleObjectsReturned"异常

Studen.objects.filter(s_gender=True).count() # 返回当前查询集中的对象个数

Studen.objects.filter(s_gender=True).first() # 返回查询集中的第一个对象

Studen.objects.filter(s_gender=True) # 返回查询集中的最后一个对象

Studen.objects.filter(s_name='tom').exists() # 判断查询集中是否有数据,如果有数据返回True

限制查询集

studentsList = Student.objects.all()[0:5] # 注意:下标不能是负数

查询集的缓存:在新建的查询集中,缓存首次为空,第一次对查询集求值,会发生数据缓存,django会将查询出来的数据做一个缓存,并返回查询结构,以后的查询直接使用查询集的缓存。


字段查询

比较运算符

Studen.objects.filter(s_name__contains='王') # 查询名字包含王的学生,大小写敏感 Studen.objects.filter(s_name__startswith='孙') # 查询名字以开头的学生,大小写敏感 Studen.objects.filter(s_name__endswith='雨') # 查询名字以结尾的学生,大小写敏感

以上四个在前面加上i,就表示不区分大小写iexact、icontains、istartswith、iendswith

StudenInfo.objects.filter(address isnull) # 查询地址是空的学生信息

StudenInfo.objects.filter(address isnotnull) # 查询地址不是空的学生信息

Studen.objects.filter(pk in (2,4,6)) # 查询pk在(2,4,6)的学生

Studen.objects.filter(s_age__gt=20) # 查询年龄大于20的学生

Studen.objects.filter(s_age__gte=20) # 查询年龄大于等于20的学生

Studen.objects.filter(s_age__lt=30) # 查询年龄小于30的学生

Studen.objects.filter(s_age__lte=30) # 查询年龄小于等于30的学生

Course.objects.filter(start_date__year=2016) # 查询开课课程在2016年的课程 Course.objects.filter(start_date__year=2016,start_date__month=10) # 查询开课课程在2016年10月的课程

# year-month-day-week_day-hour-minute-second

跨关联查询

Studen.objects.filter(course__c_name__contains='程序设计')  # 查询课程中带有程序设计的课程被选择的学生


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值