zoukankan      html  css  js  c++  java
  • django 过滤器-查询集-比较运算符-FQ对象-mysql的命令窗口

    """
    返回查询集的方法称为过滤器
    all()
    返回查询集中所有数据
    filter() 返回符合条件的数据
    一、filter(键=值)
    二、filter(键=值,键=值)   #两个关系为and
    三、filter(键=值).filter(键=值)   #两个关系为and
    exclude()过滤掉符合逻辑的数据
    order_by()排序
    values()一条数据就是一个对象{字典},返回一个列表
    
    返回单个数据:
    get() 返回一个满足条件的对象
    注意:如果没有找到符合条件对象,会引发“模型类.DoesNotExist异常”
         如果找到多个对象,也会引发“模型类.MultipleObjectsReturnen异常"
    count()  返回查询集中的对象个数
    first()  返回查询集中的第一个对象
    last()   返回查询集中的最后一个对象
    exists()  判断查询集中是否有数据,如果有返回True,没有返回False
    
    限制查询集 返回列表,可以使用下标的方法进行限制,注意下标不能是负数
    students_list = Students.stuobj.all()[0:5]  这个是显示5条记录
    下面是分页显示5条记录
    #0-5 6-10
    # 1   2
    page = int(page)
    students_list = Students.stuobj.all()[(page-1)*5:page*5]
    
    查询集的缓存
    概述:每个查询集都包含一个缓存,来最小化对数据加访问
        在新建的查询集中,缓存首次为空,第一次对查询集求值,会发生数据缓存,django会将查询出来的数据做一个缓存,并返回查询结构,以后查询的直接查询查询集的缓存
    
    字段查询
    概述
    1.实现了SQL中的WHERE语句,作为方法filter(),exclude(),get()参数
    2.语法:属性名称__比较运算符=值
    3.外键:属性名_id
    4.转义:like语句在SQL中使用%是为了匹配点位,匹配数据中的%(where like ‘\%‘)
    filter(sanme__contains‘%‘)
    
    
    比较运算符:
    exact:判断,大小写区分,例:filter(isdelete=Flase)
    contains:包含,大小写区分,例:students_list=Students.stuobj.filter(sname__contains="小")
    startswith和endswith:以values开头或者结尾的查询,大小写区分,例:students_list=Students.stuobj.filter(sname__startswith="小")
    以上四个开头加上i,就不区分大小写,iexact,icontains,istartswiht,iendswith
    isnull,isnotnull:是否为空的意思,例:filter(sname_isnull=False)
    in:是否包含在范围内,例:students_list=Students.stuobj.filter(pk__in=[2,4,6])
    gt,gte,it,ite:分别为,大于,大于等于,小于,小于等于,例:students_list=Students.stuobj.filter(sage__gt=30)
    year,month,day,week_day,hour,minute,second:日期筛选,例:students_list=Students.stuobj.filter(latetime__year=2017)
    
    跨关联查询:
    处理join查询,语法:模型类名__属性名__比较运算符
    描述中带有"小李"这两个字的数据是属于那个班级的
    students_list = Grades.gra_guanli.filter(students__scontend__contains=‘小李‘)
    print(students_list)
    
    查询快捷:
    pk  ---  代表主键
    
    聚合函数:
    使用aggregate()函数返回聚合函数的值
    Aug
    Count
    Max
    Min
    Sum
    使用时候,需要先引入,例,取最大的年龄:
    from django.db.models import Max
    studentAge = Students.stuobj.aggregate(Max(‘sage‘))
    print studentAge
    打印结果:{‘sage__max‘: 34}  #是个字典
    
    
    F对象:
    可以使用模型A属性与B属性进行比较
    也是需要先引入
    from django.db.models import F
    def grades3(request):
        g = Grades.gra_guanli.filter(ggirlnum__gt=F(‘gboynum‘))
        print(g)
        return HttpResponse("kkk")
    支持F对象的算术运算
        g = Grades.gra_guanli.filter(ggirlnum__gt=F(‘gboynum‘)+20)
    
    
    Q对象:
    概述:过滤器的方法中的关键字参数,条件为AND模式
    需求:进行or查询
    解决:使用Q对象,这个是或的关系,只两个条件有一个符合都会显示
    from django.db.models import Q
    def studentsearch(request):
        g = Students.stuobj.filter(Q(pk__gt=7) | Q(sage__gt=30))
        print (g)
        return HttpResponse(‘jj‘)
    如果只有一个Q对象,就是用于匹配
    g = Students.stuobj.filter(Q(pk__gt=7))
    如果Q对象前面再个波浪线,就是用于取反
    g = Students.stuobj.filter(~Q(pk__gt=7))
    
    
    
    
    
    
    
    
    
    
    
    如果更改django的代码,终端需要重新进入,并重新加载下面,终端区分大小写
    
    from xinapp.models import Grades,Students
    from django.utils import timezone
    from datetime import *
    
    查所有数据  类名.objects.all()
    
    给表传数据
    grade1 = Grades()
    grade1.gname = "pingguo"
    grade1.gdate = datetime(year=2017,month=7,day=17)
    grade1.ggirlnum = 8
    grade1.gboynum = 30
    grade1.save()
    .....
    
    查询数据某一个数据
    类名.objects.get(pk=num)
    Grades.objects.get(pk = 2) #相当于id = 2
    
    修改某一个表的数据
    模型对象.属性=新值
    grade1.gboynum =80
    grade1.save()
    
    删除某个表的数据
    模型对象.delete()
    物理删除(数据库中表的数据真实被删除)
    grade2.delete()
    
    关联外键(注意,表中的字段都必须赋值才能正常保存,否则会出错)
    grade1 = Grades()
    grade1.gname = "ceshi"
    stu = Students()
    stu.sname = "ksjdfk"
    stu.models.ForeignKey = grade1
    
    获取班级关联的学生
    模型对象名.关联的类名小写_set.all()
    grade1.students_set.all()
    
    通过关联直接创建学生(如果中文需要转码u‘中文‘,英文不用,它会直接存入数据库,不需要使用save())
    并且直接属于grade1的学生!
    stu3 = grade1.students_set.create(sname=u‘曾志伟‘,sgender=True,scontend=‘shuoming‘,sage=77)
    
    启动服务器
    python manage.py runserver
    
    
    
    
    mysql的命令窗口,这个是没有区分大不小写的
    
    删除除数据库
    drop database 表名; 数据库名
    创建数据库
    create database  表名; 数据库名
    展示所有数据库名称
    show databases;
    使用数据库
    use 数据名;
    展示数据库下面的所有表名称
    show tables;
    展示表的所有字段结构
    desc 项目_表名
    查询表的具体的内容
    select * from 表名(例:xinapp_grades);
    
    django中数据库基本操作:
    1.同步数据库
    python manage.py makemigrations  #生成migrations
    python manage.py migrate   #应用migrations
    2.增
    Model.objects.create(**kwargs)
    3.查
    Model.objects.all()
    4.改
    m = Model.objects.get(id=1)
    m.name = ‘new_name‘
    m.save()
    5.删
    m = Model.objects.get(id=1)
    m.delete()
    3.数据库的基本操作
    3.1 增
    我们先为shopping mall增加一个化妆品区:
    复制代码
    from django.shortcuts import HttpResponse
    from .models import Area
    def add_area(request):
        area = Area.objects.create(name=‘cosmetic‘, description=‘充满香味儿的区域‘)
        return HttpResponse(‘added!‘)
    复制代码
    其中,第六行代码 area = Area.objects.create(name=‘cosmetic‘, description=‘充满香味儿的区域‘)
    
    所对应的mysql语句为:
    
    insert into shop_area(name,description) values(‘cosmetic‘,‘充满香味儿的区域‘);
    3.2 查
    
    现在,我们来列出shopping mall中的所有区域:
    
    复制代码
    1 from django.shortcuts import HttpResponse
    2 from .models import Area
    3
    4
    5 def list_area(request):
    6     area = Area.objects.all()
    7     print(area)                    # 在shell输出[<Area: ‘cosmetic‘>],如果没有定义__str__(),将输出无意义的[<Area: Area object>]
    8
    9     return HttpResponse(‘listed!‘)
    复制代码
    第六行代码 area = Area.objects.all()
    
    相当于mysql语句:
    
    select * from shop_area;
    复习一下:shop_area为django为模型自动生成的表名(app_model)
    3.3 改
    在3.1中,我们并没有为化妆品区指定管理人员。现在,我们修改化妆品区的信息,将rinka指定为管理人员。
    
    首先,我们要创建一个rinka用户。这里我将创建一个名为rinka的superuser:
    
    python manage.py createsuperuser
    
    
    接着,将我们创建的rinka用户指定为化妆品区的管理人员:
    
    复制代码
     1 from django.shortcuts import HttpResponse
     2 from .models import Area
     3 from django.contrib.auth.models import User
     4
     5
     6 def update_area(request):
     7     rinka = User.objects.get(username=‘rinka‘)
     8     area = Area.objects.get(id=1)
     9     area.manager = rinka
    10     area.save()
    11
    12     return HttpResponse(‘updated!‘)
    复制代码
    注意必须调用对象的save()方法,对对象实例的修改才会保存到数据库中去。这是一个容易出错的地方。
    
    第8~10行代码对应的mysql语句为:
    
    update shop_area set manager_id=1 where id=1;
    复习一下:manager_id为django默认为外键生成的列名(foreignkey_id)
    3.4删
    
    删除操作很简单,我们现在来删除数据库表shop_area中id为1的那行数据:
    复制代码
    1 from django.shortcuts import HttpResponse
    2 from .models import Area
    3
    4
    5 def delete_area(request):
    6     area = Area.objects.get(id=1)
    7     area.delete()
    8
    9     return HttpResponse(‘deleted!‘)
    复制代码
    第6~7行语句对应的mysql语句为:
    delete from shop_area where id=1;
    
    模型类中定元选项(Meta类):
    db_talbe 定义数据表名,如果不定义, 默认是项目名小写_类名小写
    ordering 取数据时显示的顺充  正数为顺序,前面加负号为反序,排序会增加数据库资源
        class Meta:
            db_table="students"
            ordering=["-id"]
    
    
    
    
    """
    

      

  • 相关阅读:
    基于visual Studio2013解决算法导论之018栈实现(基于链表)
    基于visual Studio2013解决算法导论之017查找第n小元素
    基于visual Studio2013解决算法导论之016查找最大值最小值
    基于visual Studio2013解决算法导论之015第二小元素
    基于visual Studio2013解决算法导论之013基数排序
    shell脚本执行的三种方式
    Linux rm删除大批量文件遇到 Argument list too long
    lsof 命令简介
    查看目录大小以及目录数量的命令
    python调用脚本或shell的方式
  • 原文地址:https://www.cnblogs.com/zmdComeOn/p/12173485.html
Copyright © 2011-2022 走看看