数据库的查询需要使用管理器对象进行 通过mymodel.objects管理器方法调用查询对象 方法 说明 all() 查询全部记录,返回QuerySet查询对象 get() 查询符合条件的单一记录 filter...() 查询符合条件的多条记录 exclude() 查询符合条件外的全部记录 all()方法 ---- 使用方法:Asset.objects.all() from monitor.models import...,内部存放的是元组 会将查询出来的数据封装到元组中,在封装到查询集合QuerySet中 >>> a = Asset.objects.values_list("create_date") >>> a...(属性1=值1,属性2=值2),当多个属性在一起为与关系 作用:返回包含此条件的全部数据集 返回值:QuerySet容器对象,内部存放模块实例 # 查询数据库中 create_user为admin的 from...="admin",system="Linux") for i in info: print("查询结果",i.create_date) 查询谓词 定义:做更灵活的条件查询时候需要使用查询谓词 每一个查询谓词是一个独立的查询功能
我们可以在调用这些方法的时候传递不同的参数来实现查询需求。在ORM层面,这些查询条件都是使用field+__+condition的方式来使用的。以下将那些常用的查询条件来一一解释。...QuerySet.query QuerySet.query:query可以用来查看这个ORM查询语句最终被翻译成的SQL语句。...因此如果你的查询语句是通过get来获取数据的,那么就不能使用query,因为get返回的是满足条件的ORM模型,而不是QuerySet。...示例代码如下: categories = Category.objects.filter(article__id__in=[1,2,3]) 如果要判断相关联的表的字段,那么也是通过__来连接。...根据关联的表进行查询 假如现在有两个ORM模型,一个是Article,一个是Category。
ORM 查询操作 修改 views.py 文件 from django.shortcuts import render, HttpResponse from app01 import models from...Book,Author,Publisher def data_oper(req): # 查询所有出版社城市为 广州 的书名 ret = models.Book.objects.filter...(publisher__city='广州').values('title') print(ret) # 查询对应操作的sql语句 print(ret.query) return...ORM 删除操作 修改 views.py 文件 from django.shortcuts import render, HttpResponse from app01 import models from...(id=1).delete() return HttpResponse("Hello world") ORM 更新操作 修改 views.py 文件 from django.shortcuts
建表 需求(1) 需求(2) 总结 value()函数,获取列表 value()函数,获取元组 总结 建表 目前有两个表,一个用户表,一个用户类型表,一个用户对应一类型,但是一个类型下面有好多的用户...外键是在用户表里面 需求(1) 根据查询出来的用户,获取他的用户类型,这个就是多表查询,实现代码是 先查询出用户,直接根据外键字段获取他的用户类型 需求(2) 根据一个用户类型,查询他下面的所有的用户...其实有一个隐含的字段,写法是 总结 value()函数,获取列表 value()函数,获取元组 总结 以上方法 字典和元组是不可以跨表查询的 以下的写法是可以跨表的
Django 的 ORM 是创建 SQL 去查询和操作数据库的一个 Python 式的方式。...聚合查询 aggregate() 是 QuerySet 的一个终止子句,它返回一个包含一些键值对的字典。 键的名称是聚合值的标识符,值是计算出来的聚合值。...键的名称是按照字段和聚合函数的名称自动生成。 需要用到的内置函数: ? 示例: ? 如果要给聚合值指定一个名称,可以向聚合子句提供它。 ?...例如,要知道所有博客文章的浏览量的平均值、最大值和最小值。 ?
Django 的 ORM 是创建 SQL 去查询和操作数据库的一个 Python 式的方式。 F查询 Q查询 F 查询 在前几个小章节里,构造的过滤器都只是将字段值与某个常量做比较。...如果要对两个字段的值做比较,那要怎么做呢? Django 提供了 F() 来做这样的比较。F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值。...示例: 查询浏览数大于评论数的文章 Django 支持 F() 对象之间以及 F() 对象和常数之间的加减乘除和取模的操作。...例如:在所有标题后面加上(原创) Q 查询 filter() 等方法中的关键字参数查询都是一起进行 "AND"。如果需要执行更复杂的查询(例如:OR 语句)可以使用 Q 对象。...同时,Q 对象可以使用 ~ 操作符取反,这允许组合正常的查询和取反(NOT)查询。 示例: 查询作者名字是“小团子”并且不是2018年发表的文章的标题。 查询函数可以混合使用 Q 对象和关键字参数。
###多表查询 一般的多表查询都是直接建立一个多对多关系 class Books(models.Model): users = models.ManyToManyField(User, related_name...1、根据books中的属性来查询用 Books.objects.filter(name="aaa") 2、根据assets中的title来查询books,这个时候就需要用到related_name属性来查询...="aaa") 也可以查询assets然后反向查询 _books=list() aa=Assets.objects.filter(title="aaa").all() for a in aa: _...books.append(a.books) 3、根据user类中的name查询books Books.objects.filter(t_assets__users__name="aaa") 4、多字段模糊匹配...,这个时候就需要用到django提供的Q类来封装查询语句 Books.objects.filter(Q(name__icontains=search) | Q(t_assets__title__icontains
Django 的 ORM 是创建 SQL 去查询和操作数据库的一个 Python 式的方式。...回顾上节的知识点 注:Tb 为 模型 model 的 Class 名,比如 Post.objects.all() 1.返回 QuerySet 对象的方法 >>> Tb.objects.all() >>...>>> Tb.objects.exists() 5.返回数字的方法 >>> Tb.objects.count() 单表查询 Tb.objects.filter( id__lt=3, id__gt...=1 ) 获取 id 大于(gt) 1 且 小于(lt) 3 的值 Tb.objects.filter( id__in=[2, 4, 5] ) 获取 id 等于 2、4、5的数据 Tb.objects.exclude...( id__in=[1, 3] ) 得到排除 id 等于 1、3 的数据 Tb.objects.filter( title__contains="博客" ) 获取 title 字段包含“博客”的数据
在日常开发中,数据库的增删改查(CDUR)中,查询需求偏多,所以查询的语法比增删改操作多得多,尤其是跨表关联查询,可以让代码精简很多。 直接上代码吧,我是直接在上次写的的视图函数中改写的。...def orm_test(request): """ 增加操作 """ # 新增一个名字为1901的一个班级,create是新增方法,里面可以接受多个字段参数 #..."1901_xiu").delete() """ 查询操作 """ # 查询单条,get返回实例,如果查询结果没有回报错, # filter查询返回的结果是多个实例的列表...,返回queryset类型(多个查询结果实例的列表) 可以被迭代 # queryset = Student.objects.all() # # for stu in queryset:...(跨表),可以用多个双下划线跨多张表 # 语句功能是查询学生表中所有学生的姓名和学生所在班级的名称 # cls__name 是cls双下划线name,cls 是Student中的cls字段
一、反向连表查询 ① 通过object的形式反向连表 obj.小写表名_set.all() publish=models.Publish.objects.filter(name__contains='长沙...objs.values("小写表名__字段") 注意对象集合调用values(),正向查询是外键字段__XX,而反向是小写表名__YY看起来 比较容易混淆; books=models.Publish.objects.filter...models.Book.objects.filter(title__icontains='云团').values('author__name') print(authors) filter()也支持__小写表名语法进行连表查询...publishs=models.Publish.objects.filter(book__title='数据分析').values('name') print(publishs) 二 、利用双下划线将字段和对应的操作连接起来...获取id小于10的值 models.Tb1.objects.filter(id__lte=10) # 获取id大于1 且 小于10的值 models.Tb1.objects.filter(id__lt=
查询集 返回一个对象的集合 调用如下方法会返回查询集 filter all order_by exclude 返回条件之外的数据 exists 判断查询集是否有数据, 返回 true false first...all(): 查询所有结果 get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。...-----------下面的方法都是对查询的结果再进行处理:比如 objects.filter.values()-------- values(*field): 返回一个ValueQuerySet...(*field): 对查询结果排序 reverse(): 对查询结果反向排序 distinct(): 从返回结果中剔除重复纪录 values_list(*field): 它与values...()非常相似,它返回的是一个元组序列,values返回的是一个字典序列 count(): 返回数据库中匹配查询(QuerySet)的对象数量。
一 、ORM 查询性能 ① 普通查询 #for循环10次发送10次数据库查询请求 obj_list=models.Articles.objects.all() for row in obj_list...: print(row.name) 这种查询方式第一次发送 查询请求每for循环一次也会发送查询请求 ② select_related() 结果为对象 注意query_set类型的对象...,所以出现prefetch_related; prefetch_related:不做连表,多次单表查询外键表 ,去重之后显示, 2次单表查询(有几个外键做几次1+N次单表查询) 适用场景:效率高,数据量大的时候适用...aggregate() 中每一个参数都指定一个包含在字典中的返回值。即在查询集上生成聚合。...from django.db.models import Avg,Sum,Max,Min #求书籍的平均价 ret=models.Book.objects.all().aggregate(Avg('price
场景: 有一个表中的某一列,你需要获取到这一列的所有值,你怎么操作?...QuerySet,内容是键值对构成的,键为表的列名,值为对应的每个值。...QuerySet,但是内容是元祖形式的查询列的值。...但是我们想要的是这一列的值呀,这怎么是一个QuerySet,而且还包含了列名,或者是被包含在了元祖中?...查看高阶用法,告诉你怎么获取一个值的 list,如:['测试feed', '今天', '第三个日程测试', '第四个日程测试', '第五个测试日程']
模型是Python中的一个类,它是由django.db.models.Moduel派生出的一个子类 一个模型类就代表数据库中的一张表 模型类中的每一个类的属性都代表数据库中的一个字段 模型是数据交互的接口...,是表示和操作数据库的方法和方式 ORM框架 定义:ORM(Object Relation Mapping)即对象关系映射,它是一种程序技术,它允许你使用类和对象数据库进行操作,从而进行避免通过SQL...缺点 对于复杂业务,使用成本较高… 根据对象的操作转换成SQL语句,根据查询的结果转化成对象,在映射的过程中有性能损失 世间万物 即无完美 ORM DataBase Class(类) Table...(数据表) Object(对象) DataRow(数据行) Attribute(属性) Field(字段) 模型代码示例 该文件位于APP的models.py from django.db import...() # 告诉django用pymysql代替mysqldb连接数据库 # 将配置原封不动的写入settings.py DATABASES = { 'default':{ 'ENGINE
前言 ORM 使用 filter() 查询的时候,当有多个条件的时候,可以使用 Q 查询 Q 查询 or 如有个 Card 模型,表里面有以下数据 ?...查询 card_user 名称为 YOYO 或 yoyo的数据,使用 SQL 可以这样查询 select * from yoyo_card where card_user = 'YOYO' or 'yoyo...'; filter() 查询,查询或关系 MyDjango>python manage.py shell >>> from yoyo.models import Card >>> from django.db.models...同时满足2个条件,使用 & 和 and 都可以 MyDjango>python manage.py shell >>> from yoyo.models import Card >>> from django.db.models...not Q 对象可以使用~ 操作符取反,这允许组合正常的查询和取反(NOT) 查询 查询 card_user = ‘YOYO’ 并且 add_time 的日期不是 21号的数据 >>> Card.objects.filter
我们继续昨天的内容使用Oracle中的emp,dept来学习Django ORM,今天做一些总结和扩展,希望你能有所收获。 先来说下两张表emp,dept。...>>> dept.objects.get_or_create(dname='DBA',loc='Shenzhen') (, True) 2.查询语句 根据主键查询 >>> dept.objects.get...`ename` ASC' 12.select_related查询 这种方式的一大好处就是会自动关联查询,调用一次会自动获取相关的数据。 我们可以对比下它和通常方式的差别。...使用传统的方式,如果需要关联查询,会在后台反复调用关联查询。 >>> emp.objects.all()[:10] (0.001) SELECT `emp`.`empno`, `emp`....查询 对比prefetched related的好处 >>> a=emp.objects.all().filter(empno__in=(7369,7521,7566)) >>> a (0.001) SELECT
1.查询操作 查找是数据库操作中一个非常重要的技术。查询一般就是使用filter、exclude以及get三个方法来实现。我们可以在调用这些方法的时候传递不同的参数来实现查询需求。...在ORM层面,这些查询条件都是使用field+__+condition的方式来使用的。 1.1.查询条件 1 .exact 使用精确的=进行查找。...IS NULL; article.query,可以得到Django执行的SQL语句。...,在使用contains的时候,翻译成的sql语句左右两边是有百分号的,意味着使用的是模糊查询。...而exact翻译成sql语句左右两边是没有百分号的,意味着使用的是精确的查询。 4.icontains 大小写不敏感的匹配查询。
前言 Django 的查询语法难以简单的表达复杂的 WHERE 子句,对于对于这种情况, Django 提供了 extra() 方法。...is_age 返回的是一个布尔值 django查询的示例: PersonInfo.objects.all().extra(select={‘is_age’: “age > 18”}).values(‘age...django 查询的示例, where 传的是 list 类型参数: >>> PersonInfo.objects.all().extra(where=["age in (20, 21) and name...[{'age': 20, 'name': 'yoyo2'}, {'age': 20, 'name': 'yoyo4'}, {'age': 21, 'name': 'yoyo5'}]> >>> and 的多个条件也可以逗号分成多个参数...django 查询的示例,table传list参数,可以是多个表名称,如:table=[‘yoyo_personinfo’] Card.objects.all().extra(tables=[‘yoyo_personinfo
32) f2= models.IntegerField() f3 = models.ForeignKey('B1') 在views.py中: #B2中 外键f3 指向B1中u1=‘x’ 的所有对象的列表...obj_list = B2.objects.filter(f3__u1='x') #B2中 外键f3 指向B1中u1=‘x’ 的所有对象的f1的值的列表 obj_f1_list = B2.objects.filter
模型类-字段选项 字段选项:指定创建的列的额外信息 允许出现多个字段选项,多个选项之间使用,隔开 primary key 如果设置为True,表示该列为主键,如果指定一个字段为主键,则此数据库不会创建...Id字段 blank 设置为True的时候,字段可以为空。...设置为False的时候字段是必须填写的 null 如果设置为True则表示该列允许为空....unique 如果设置为True表示该字段在数据库中的值必须是唯一的(不能重复出现) db_column 指定列名称,如果不指定的话则采用属性名作为列名 verbose_name 设置此字段在admin...界面上的显示名称 模型类-Meta类 使用补Meta类来给模型赋予属性,Meta类下有很多内建的类属性,可对模型类做一些控制 class Author(models.Model): name =
领取专属 10元无门槛券
手把手带您无忧上云