一、django ORM简介 O(objects):类和对象。R(Relation):关系,关系数据库中的表格。M(Mapping):映射。...Django ORM框架的功能: 建立模型类和表之间的对应关系,允许我们通过面向对象的方式来操作数据库。 根据设计的模型类生成数据库中的表格。 通过方便的配置就可以进行数据库的切换。...Django不支持负索引。 6.distinct(): distinct(*fields) 去除查询结果中重复的行。 默认情况下,QuerySet不会去除重复的行。...Q查询 F查询专门取对象中某列值的操作,F的作用:用来批量修改数据的 #导入F from django.db.models import F #把table1表中的num列中的每一个值在的基础上加10...__gt=4 九、实例 1、Django的ORM中如何判断查询结果是否为空,判断django中的orm为空 result= Booking.objects.filter() 方法一 .exists()
ORM 模块,我们来看下具体的使用,部分内容会给出基于 MySQL 的 SQL 语句。...从数据库中查询出来的结果一般是一个集合,这个集合称为 QuerySet。...QuerySet exclude(**kwargs) - 获得不满足查询条件的 QuerySet get(**kwargs) — 从数据库中获得一个匹配的结果(一个实例),如果没有匹配结果或者匹配结果大于一个都会报错...当首次对 QuerySet 的所有实例进行求值时,会将查询结果保存到 QuerySet 的缓冲中。当再访问该 QuerySet 时,会直接从缓冲中取数据。...如果只对 QuerySet 的部分实例(query_set[5], query_set[0:10])进行求值,首先会到 QuerySet 的缓冲中查找是否已经缓存了这些实例,如果有就使用缓存值,如果没有就查询数据库
(Object Relational Mapping,简称ORM)(将来会学一个sqlalchemy,是和他很像的,但是django的orm没有独立出来让别人去使用,虽然功能比sqlalchemy更强大...: 返回与所给筛选条件相匹配的对象,不是queryset类型,是行记录对象,返回结果有且只有一个, 如果符合筛选条件的对象超过一个或者没有都会抛出错误...) order_by(*field): queryset类型的数据来调用,对查询结果排序,默认是按照id来升序排列的,返回值还是queryset类型...model的实例化对象,而是一个可迭代的字典序列,只要是返回的queryset类型,就可以继续链式调用queryset类型的其他的查找方法,其他方法也是一样的。...数据库的时区和咱们django的时区不同导致的,了解一下就行了,你需要做的就是将django中的settings配置文件里面的USE_TZ = True改为False,就可以查到结果了,以后这个值就改为
default="" )【二】ORM数据操作# 【一】前提# 在Django中操作Django的模型表 必须让 Django 处于运行的状态# 必须启动 Django...) # print(result) # 获取到的结果是 QuerySet 对象 返回值是一个列表 # # QuerySet []>...(result) # 获取到的结果是 QuerySet 对象 返回值是一个列表 # # QuerySet []> # [4] 获取到多个数据 -- 不会报错 # result =...Student.objects.filter(name="dream") # print(result) # 获取到的结果是 QuerySet 对象 返回值是一个列表 # # QuerySet...(result) # 获取到的结果是 QuerySet 对象 返回值是一个列表 # QuerySet []> # (总结)
我们可以通过manage.py开启Shell交互式环境,然后使用Django内置的ORM框架对模型进行CRUD操作。...语句并获取对应的结果,这一点在实际开发中需要引起注意!...模型定义参考 字段 对字段名称的限制 字段名不能是Python的保留字,否则会导致语法错误 字段名不能有多个连续下划线,否则影响ORM查询操作 Django模型字段类 字段类 说明 AutoField...,是否允许为NULL,默认为False choices 设定字段的选项,各元组中的第一个值是设置在模型上的值,第二值是人类可读的值 db_column 字段对应到数据库表中的列名,未指定时直接使用字段的名称...unique 设置为True时,表中字段的值必须是唯一的 verbose_name 字段在后台模型管理显示的名称,未指定时使用字段的名称 ForeignKey属性 limit_choices_to:值是一个
,如果符合筛选条件的对象超过了一个或者没有一个都会抛出错误 区别filter()如果获取不到符合条件的数据,返回一个空对象,不报错 from django.shortcuts import render...") values 查询字段 返回的是 QuerySet 类型数据,类似于 list,里面不是模型类的对象,而是一个可迭代的字典序列,字典里的键是字段,值是数据 def book(request...注意: 对模型类的对象去重没有意义,因为每个对象都是一个不一样的存在(主键不一样),去重的前提是数据必须是一模一样,不能加主键,有unique的也没意义 distinct() 一般是联合 values...,因为每个对象都是一个不一样的存在,主键不一样 return HttpResponse("查找成功!...类型数据.delete()(推荐) 返回值:元组,第一个元素为受影响的行数。
永久重定向 302 临时重定向 404 请求的资源不存在 分类: 1**,收到请求,需要继续执行操作 2**,成功,操作被成功接收并处理 3**,重定向 4**,客户端错误 5**,服务器错误 Django...ORM-创建数据 增删改查 ORM CRUD核心:模型类.管理器对象 管理器对象 每一个models.Model的模型类,都会有一个objects对象被同样继承下来,这个对象叫做管理器对象。...() 等价于select * from table 返回值:QuerySet容器对象,类数组对象,内部存放了MyModel实例 如 QuerySet [<Book: Python,20.00...1.单个数据删除 查找对应的数据对象 调用该数据对象的delete()方法实现删除 2.批量数据删除 查找QuerySet 调用delete()方法实现删除 3.伪删除操作 通过在表里添加一个布尔型字段...字典 分组聚合 其实是为了实现Having语句 通过计算查询结果中每一个对象所关联的对象集合,从而得出总计值,为查询集的每一项生成聚合 QuerySet.annotate(结果变量名(别名)=聚合函数
基于数据库生成实体类 Django框架提供了ORM来解决数据持久化问题,ORM翻译成中文叫“对象关系映射”。...利用Django的ORM,我们可以直接将刚才创建的学科表和老师表变成Django中的模型类。...= 'tb_teacher' 3.使用ORM完成模型的CRUD操作 在终端中输入下面的命令进入到Django项目的交互式环境,然后尝试对模型的操作。...说明2:ORM查询多个对象时会返回QuerySet对象,QuerySet使用了惰性查询,即在创建QuerySet对象的过程中不涉及任何数据库活动,等真正用到对象时(对QuerySet求值)才向数据库发送...SQL语句并获取对应的结果,这一点在实际开发中需要引起注意!
来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 Django orm的优势: Django的orm操作本质上会根据对接的数据库引擎,翻译成对应的sql语句;所有使用Django...单表操作 0、orm操作前戏 orm使用方式: orm操作可以使用类实例化,obj.save的方式,也可以使用create()的形式 QuerySet数据类型介绍 QuerySet与惰性机制 所谓惰性机制...:Publisher.objects.all()或者.filter()等都只是返回了一个QuerySet(查询结果集对象),它并不会马上执行sql,而是当调用QuerySet的时候才执行。...连表操作 我们在学习django中的orm的时候,我们可以把一对多,多对多,分为正向和反向查找两种方式。...orm连表操作必须选拿单个对象,不像SQL中直接表和表join就可以了) print(obj.cls.title) foreignkey 字段在哪个表里,哪个表里一个"空格"代表哪个表的多个(一行) class
查询条件 exact 使用精确的=进行查找。如果提供的是一个None,那么在SQL层面就是被解释为NULL。...QuerySet.query QuerySet.query:query可以用来查看这个ORM查询语句最终被翻译成的SQL语句。...但是query只能被用在QuerySet对象上,不能用在普通的ORM模型上。...容器可以为list、tuple或者任何一个可以迭代的对象,包括QuerySet对象。...根据关联的表进行查询 假如现在有两个ORM模型,一个是Article,一个是Category。
ORM的优势 ORM解决的主要问题是对象和关系的映射。它通常把一个类和一个表一一对应,类的每个实例对应表中的一条记录,类的每个属性对应表中的每个字段。 ...通常,一个模型(model)映射到一个数据库表, 基本情况: 每个模型都是一个Python类,它是django.db.models.Model的子类。 模型的每个属性都代表一个数据库字段。...Django中ORM快速入门 下面这个例子定义了一个 Person 模型,包含 first_name 和 last_name。...- bigint自增列,必须填入参数 primary_key=True 注:当model中如果没有自增列,则自动会创建一个列名为id的列 from django.db...Django Admin中的错误信息会优先根据Admiin内部的ModelForm错误信息提示,如果都成功,才来检查Model的字段并显示指定错误信息 b.
的子类 class 中的所有属性对应表格中的字段 字段的类型都必须使用 modles.xxx 不能使用python中的类型 在django中,Models 负责跟数据库交互 django连接数据库 自带默认数据库...查询命令 - 类名.objects.all() 查询数据表中的所有内容,返回的结果是一个 QuerySet 类型,实际上是类列表中装这个一个一个数据对象 - 类名.objects.filter...(条件) 查找数据 # from 应用名.models import 类名 from myapp.models import Student # 查询Student表中的所有数据,得到的是一个QuerySet...大于 gte : 大于等于 lt : 小于 lte : 小于等于 range: 范围 year : 年份 isnull : 是否为空 查找等于指定值的格式: 属性名 = 值 模糊查找: 属性名 _..._ (使用下面的内容) = 值 exact : 精确等于 iexact: 不区分大小写 contains: 包含 startwith: 以..开头 endwith: 以…结尾 # 查找年龄大于18的老师
安全性 Django 帮助开发人员通过提供一个被设计为“做正确的事情”来自动保护网站的框架来避免许多常见的安全错误。...每个版本都添加了新功能和错误修复,从支持新类型的数据库,模版引擎和缓存,到添加“通用”视图函数和类(这减少了开发人员必须编写的代码量)一些编程任务。..., # 给出他们的具体名称,Django使用这些定义(包括字段名称)来创建底层数据库. 4.查询数据(views.py) Django模型提供了一个而用于搜索数据库的简单查询API,这可以使用不同的标准...类似 CharField, 必须要有maxlength参数. ORM参数 (1)null 如果为True,Django 将用NULL 来在数据库中存储空值。 默认值是 False....(4)unique 如果该值设置为 True, 这个数据字段的值在整张表中必须是唯一的 (5)choices 由二元组组成的一个可迭代对象(例如,列表或元组),用来给字段提供选择项。
(ORM)中,数据库与 python 对象的映射关系十分形象,一个表模型类(class)即代表一张表,实例化出一个对象即代表一条数据记录 创建一个对象(一条数据记录) 在 django 中要想创建一个数据对象...一个 QuerySet 代表着你数据库中的一系列对象的集合,它可以是 0 个、 1 个 或者多个 filters,filters 可以基于你给出的参数 缩小查询结果的范围,对于 SQL ,一个 QuerySet...想要得到这么一小部分对象,我们需要细化(约束)最初的 QuerySet ,增加过滤条件,细化 QuerySet 最常用的两种写法如下: filter(**kwargs) 返回一个符合你给出的查找参数(条件...)的 QuerySet(满足条件的) exclude(**kwargs) 返回一个不符合你给出的查找参数(条件)的 QuerySet(不满足条件的) 查找参数(**kwargs)应该符合 Field lookups...QuerySet 对象的 filter() 、exclude()、get() 方法中作为条件 常见形式 注意点 不同数据库对这些方法支持不同,django orm 对应不同数据库也能翻译成不同的 SQL
条 all(): 查询所有结果 get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个..., 如果符合筛选条件的对象超过一个或者没有都会抛出错误。...(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列model的实例化对象,而是一个可迭代的字典序列 values_list...如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的比较。F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值。...执行原生SQL的方法 Django ORM执行原生SQL
get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。... distinct(): 从返回结果中剔除重复纪录(如果你查询跨越多个表,可能在计算QuerySet时得到重复的结果。...() # 找到第一个出版社出版的所有书 titles = books.values_list("title") # 找到第一个出版社出版的所有书的书名 字段查找 语法: 表名__字段 示例: titles...如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的比较。F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值。...id except Exception as e: print(str(e)) 其他鲜为人知的操作 Django ORM执行原生SQL # extra # 在QuerySet的基础上继续执行子语句
一、orm使用方式: orm操作可以使用类实例化,obj.save的方式,也可以使用create()的形式 二、QuerySet数据类型 QuerySet与惰性机制 所谓惰性机制:Publisher.objects.all...()或者.filter()等都只是返回了一个QuerySet(查询结果集对象),它并不会马上执行sql,而是当调用QuerySet的时候才执行。...,必须填入参数 primary_key=True # 注:当model中如果没有自增列,则自动会创建一个列名为id的列 from django.db import models...NullBooleanField(Field): - 可以为空的布尔值 CharField(Field) - 字符类型 - 必须提供max_length参数, max_length...="错误信息" 错误信息 validators 自定义错误验证(列表类型),从而定制想要的验证规则 from django.core.validators import RegexValidator
5.2 ORM表模型 表(模型)的创建: 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名。...id" = 3; 此外,update()方法对于任何结果集(QuerySet)均有效,这意味着你可以同时更新多条记录update()方法会返回一个整型数值,表示受影响的记录条数。...查询所有结果 # get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。...与惰性机制 所谓惰性机制:Publisher.objects.all()或者.filter()等都只是返回了一个QuerySet(查询结果集对象),它并不会马上执行sql,而是当调用QuerySet的时候才执行...聚合查询和分组查询 aggregate(*args,**kwargs): 通过对QuerySet进行计算,返回一个聚合值的字典。
目录 Django ORM 多表操作(二) 多对多操作常用API 分组查询 单表分组查询示例 多表分组查询练习 查询练习 ORM 事务 ORM 常见字段和参数 ORM常见字段 ORM 常见参数 choices...,结果是queryset对象,作者列表 ret=book.authors.all() # 6 queryset对象,又可以继续点(查询红楼梦这本书所有作者的名字) ret=book.authors.all...分组后,用 values 取值,则返回值是 QuerySet 数据类型里面为一个个字典; 分组后,用 values_list 取值,则返回值是 QuerySet 数据类型里面为一个个元组 注意:MySQL...元信息 ORM对应的类里面包含另一个Meta类,而Meta类封装了一些数据库的信息。...主要字段如下: db_table ORM在数据库中的表名默认是 app_类名,可以通过db_table可以重写表名 index_together 联合索引 unique_together 联合唯一索引
(即俩个字段中间用_连接起来) 3、创建外键的时候 models.ForeignKey(UserType) ForeignKey中参数代表的类必须在其上面,否则就必须写成字符串的形式 from django.db...CharField 要求必须有一个参数 maxlength, 用于从数据库层和Django校验层限制该字段所允许的最大字符数....admin 用一个 文本框表示该字段保存的数据(一个单行编辑框) XMLField 一个校验值是否为合法XML的 TextField,必须提供参数: schema_path..., 它是一个用来校验文本的 RelaxNG schema 的文件系统路径. 1、null=True 数据库中字段是否可以为空 2、blank=True django的 Admin 中添加数据时是否可允许空值...userinfo表中的user,所以应该user中数据全部显示,而'user_type__caption'即另一张表中的数据根据user对应的值进行显示 一对多之正向查找通过UserInfo表查找UserType