Django模型-常用查询及表关系的实现

一、常用查询:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

 #常用查询条件
    # rs=user.objects.first();#查询第一条数据
    # print(rs)
    # rs = user.objects.last();  # 查询最后一条数据
    # rs=user.objects.exclude(id=3);#查询条件之外的数据
    # rs=user.objects.order_by('id')#对查询结果正序排序
    # rs=user.objects.order_by('-id')#对查询结果逆排序
    # rs=user.objects.order_by('age','id')#对查询结果多字段排序
    # rs=user.objects.all().values()#将查询结果变成字典类型
    # rs=user.objects.count()#统计查询结果的条数
    # print(rs)
    # return HttpResponse('查找成功')
 #常用的查询条件
    # rs=user.objects.filter(name__exact='赵四');#__exact表示等于,如果查询内容中有大小写,则忽略
    # rs=user.objects.filter(name__contains='赵')#相当于模糊查询
    # rs=user.objects.filter(name__startswith='张')#表示以张为开始的数据
    # rs=user.objects.filter(name__endswith='四')#表示以四为结束的数据
    # rs=user.objects.filter(age__in=[18,20]);#查询age是18或20的数据
    #lt表示小于,gt表示大于,lte表示小于等于,gte表示大于等于
    # rs=user.objects.filter(age__range=(10,52))#查询在区间内的数据
    rs=user.objects.all()[0:3]#查询结果切片的数据
    print(rs);

二、表关系实现:

在这里插入图片描述
在这里插入图片描述

class ShuaiDu(models.Model):
    id = models.AutoField(primary_key=True)  # 表示自增长类型,且为主键
    name = models.CharField(max_length=30,default='')  # 创建一个名字字段,且最大长度为30
    age = models.IntegerField()  # 创建一个年龄字段
    gender=models.BooleanField(default=True);#创建一个性别的字段,默认为true
    note=models.TextField()#创建一个介绍的字段
    create_time=models.DateField(auto_now_add=True)#创建一个时间字段,默认为年月日
    update_time=models.DateField(auto_now=True)#创建一个更新的时间字段
    def __str__(self):
        return 'id=%s,name=%s,age=%s,gender=%s,note=%s' % (self.id, self.name, self.age,self.gender,self.note);

#导入相应的模型
from .models import Department,Course,detail,Studengt
#创建相应操作的方法
def func(request):
    # 添加学院表信息
    # Department.objects.create(d_name='计算机学院')
    # Department.objects.create(d_name='数信学院')
    # Department.objects.create(d_name='文史学院')
    # Department.objects.create(d_name='马克思学院')
    # Department.objects.create(d_name='机电学院')
    # Department.objects.create(d_name='设计艺术学院')
    # Department.objects.create(d_name='电气工程学院')
    #添加学生
    # Studengt.objects.create(s_name='杜锦丰',department_id=1)
    # Studengt.objects.create(s_name='杜甫',department_id=2)
    # Studengt.objects.create(s_name='老季',department_id=3)
    # Studengt.objects.create(s_name='田英',department_id=4)
    # Studengt.objects.create(s_name='王三',department_id=5)
    # Studengt.objects.create(s_name='花花',department_id=6)
    # Studengt.objects.create(s_name='耿耿',department_id=7)
    # Studengt.objects.create(s_name='余淮',department_id=3)
    # Studengt.objects.create(s_name='李白',department_id=2)
    # Studengt.objects.create(s_name='黄河')

    #级联查询三种方法:
    #1.on_delete=models.CASCADE删除主键,同时删除外键
    #2.on.delete=models.SET_NULL,NULL=True,删除数据同时,外键的内容不会同时删除,设置为空
    #3.on.delete=model.PROTECT,如果有外键正引用的话,如果删除的主键正好外键正在使用,则删除不成功

    #1:n关系的添加
    #1.student.objects.add(对象),对象不能为空
    #2.student.objects.create(内容)
    # d1=Department.objects.get(d_id=1)#获取id为1的学院
    #添加学生
    # d1.studengt_set.create(s_name='张三丰')
    #通过学生找学院
    # s2=Studengt.objects.get(s_id=2)#找到id为2的学生
    # print(s2.department.d_name)
    # s3=Studengt.objects.get(s_id=4);
    # print(s3.department.d_name)
    #通过学院找学生
    # d1=Department.objects.get(d_id=1);#找到id=1的学院
    # print(d1.studengt_set.all())#找到d1所有的学生
    #1:1关系
    # 添加学生详情表信息
    # detail.objects.create(s_age=15,s_note='今天查询表信息',s_phone=1245458,student_id=1)
    # detail.objects.create(s_age=22,s_note='今天哈哈哈',s_phone=12445458,student_id=2)
    # detail.objects.create(s_age=21,s_note='我是谁',s_phone=12451248,student_id=3)
    # detail.objects.create(s_age=35,s_note='这是怎么了',s_phone=124145458,student_id=4)
    # detail.objects.create(s_age=15,s_note='还得上课',s_phone=124365458,student_id=5)
    # detail.objects.create(s_age=55,s_note='上什么课',s_phone=178245458,student_id=6)
    # detail.objects.create(s_age=36,s_note='什么时候开学',s_phone=198245458,student_id=7)
    # stu=detail.objects.get(id=1)#获取详细信息表id=1的学生
    # print(stu.student.s_name)#正向查找
    # s2=Studengt.objects.get(id=2)
    # print(s2.detail);#反向查找,
    #多对多的
    #添加课程表的信息
    # Course.objects.create(c_name='语文')
    # Course.objects.create(c_name='数学')
    # Course.objects.create(c_name='英语')
    # Course.objects.create(c_name='体育')
    # Course.objects.create(c_name='思想品德')
    # Course.objects.create(c_name='历史')
    #让学生选课
    s1=Studengt.objects.get(s_id=1)
    s2=Studengt.objects.get(s_id=2)
    s3=Studengt.objects.get(s_id=3)
    s4=Studengt.objects.get(s_id=4)
    s5=Studengt.objects.get(s_id=5)
    s6=Studengt.objects.get(s_id=6)
    s7=Studengt.objects.get(s_id=7)
    c1=Course.objects.get(c_id=1)
    c2=Course.objects.get(c_id=2)
    c3=Course.objects.get(c_id=3)
    c4=Course.objects.get(c_id=4)
    c5=Course.objects.get(c_id=5)
    #选课增加
    # c1.student.add(s1,s4,s5,s6)
    # c2.student.add(s2,s4,s3,s6)
    # c3.student.add(s1,s2,s7,s5)
    # s2.course_set.add(c4,c5)
    #查询
    # print(c1.student.all())#查看选c1课程的学生
    # print(s1.course_set.all())#查看s1选的课程
    #删除
    # s1.course_set.remove(c3)
    #查询报名体育课程学生的详细信息
    #student__course表示学生表与课程表联查
    # rs=detail.objects.filter(student__course__c_name='体育');
    # print(rs);
    #查询学生名字包含三的学生的学院信息
    rs=Department.objects.filter(studengt__s_name__contains='三');
    print(rs);

    return HttpResponse('操作成功')
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值