转载自 https://www.jianshu.com/p/d92ecd3644f7?utm_campaign=hugo&utm_medium=reader_share&utm_content=note&utm_source=qq

where语句,和过滤相关的方法或函数如下:

  • all() : 返回所有的数据,得到的是一个列表

  • filter() :返回复合条件的数据,条件可以有多个,多个条件用 ',' 隔开,得到的结果也是一个列表

  • exclude() :过滤掉符合条件的数据,返回一个列表

  • order_by() : 按照指定字段进行排序

  • values() : 每条数据都作为一个字典,放在一个列表中

  • get() : 也可以接受多个条件,与 filter 不同,这里返回的是一个满足条件的对象,为单个值,且如果没有符合条件的就会报MultiObjectReturned错误,而 filter 不会报错,而是返回一个空列表。

  • first():返回查询结果中的第一个对象

  • last():返回查询结果中的最后一个对象

  • count():返回当前查询结果中的对象个数

  • exists():判断查询结果中是否有数据,如果有数据返回True,没有返回False

  1. 限制查询结果的条数

限制结果的条数,类似于SQL中的limit和offset。在ORM中则是使用下标的方式去限制,这里有点类似于 python 中列表的下标运算,只是这里的下标不能为负数。

如:模型名.objects.all()[0:5]

4)ORM中的模糊查询

  • startswith : 匹配开始字符串

  • endswith : 匹配结束字符串

  • contains : 匹配包含该字符串的项

示例:

查询姓王的数据
stus = Student.objects.filter(stu_name__startswith='王')
查询以什么结束的数据:
stus = Student.objects.filter(stu_name__endswith='胖')
查询姓名中包含大的数据
stus = Student.objects.filter(stu_name__contains='大')

5)ORM中的比较运算符

  • isnull,isnotnull:是否为空。

    如:filter(stu_name__isnull=True)

  • in:是否包含在范围内。这个类似python中的in

    如:filter(id__in=[1,2,3])

  • gt,gte,lt,lte:大于,大于等于,小于,小于等于。

    如:filter(age__gt=10)

  • pk:代表主键,也就是id。

6)聚合函数

与SQL中的聚合函数一样,只是ORM中药通过ggregate()函数获得聚合函数的返回值。

  • Avg:求平均值

  • Count:求次数

  • Max:求最大值

  • Min:求最小值

  • Sum:求和

例如: Student.objects.aggregate(Max('age'))

7)F对象和Q对象

导入F对象和Q对象: from django.db.models import F, Q

  • F对象:使用在模型的A属性与B属性进行比较的时候,比如要比较一个学生的A成绩和B成绩的时候就需要用到F对象。

例如:查找语文成绩比数学成绩至少高10分的学生:

stus = Student.objects.filter(stu_yuwen__gte=F('stu_shuxue') + 10)

  • Q对象:是为了将过滤条件组合起来查询,在查询的条件中需要组合条件 “且(&)” 或者 “或( | )” 时。我们需要使用Q()查询对象。

例如:查询学生姓名不叫王大锤的,或者语文成绩大于80分的学生

stus = Student.objects.filter(~Q(stu_name='王大锤') | Q(stu_yuwen__gt=80))

注意:Q()对象的前面使用字符“~”来代表意义“非”

模型字段定义

定义属性时,需要字段类型,字段类型被定义在django.db.models.fields目录下,为了方便使用,被导入到django.db.models中,所以在定义属性时要导入库,并通过models去定义属性。

导入库:APP目录下的models.py文件中

from django.db import models

定义属性:

class Student(models.Model):
stu_name = models.CharField(max_length=10)
属性命名规则
  • 遵循标识符规则(不使用python预定义的标识符号,内置函数名,异常等。避免使用下划线等)

  • 由于django的查询方式,不允许使用连续的下划线

字段类型
  • AutoField() : 一个根据实际ID自动增长的IntegerField,通常不指定如果不指定,一个主键字段将自动添加到模型中.

  • CharField(max_length=字符长度,....) : 字符串,默认的表单样式是 TextInput.

  • TextField() : 大文本字段,一般超过4000使用,默认的表单控件是Textarea.

  • IntegerField() : 整数

  • DecimalField(max_digits=None, decimal_places=None) : 使用python的Decimal实例表示的十进制浮点数, max_digits 指定总位数,decimal_places 指定小数点后保留几位。

  • FloatField() : 用Python的float实例来表示的浮点数.

  • BooleanField() : true/false 字段,此字段的默认表单控制是CheckboxInput.

  • NullBooleanField() : 支持null、true、false三种值.

  • DateField([auto_now=False, auto_now_add=False]) : 使用Python的datetime.date实例表示的日期 auto_now 每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为false。 auto_now_add 当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为false.

说明:该字段默认对应的表单控件是一个TextInput. 在管理员站点添加了一个JavaScript写的日历控件,和一个“Today"的快捷按钮,包含了一个额外的invalid_date错误消息键。

注意:auto_now_add, auto_now, and default 这些设置是相互排斥的,他们之间的任何组合将会发生错误的结果。

  • TimeField() : 使用Python的datetime.time实例表示的时间,参数同DateField.

  • DateTimeField() : 使用Python的datetime.datetime实例表示的日期和时间,参数同DateField.

  • FileField() : 一个上传文件的字段.

  • ImageField : 继承了FileField的所有属性和方法,但对上传的对象进行校验,确保它是个有效的image.

字段选项

概述

通过字段选项,可以实现对字段的约束,在字段对象时通过关键字参数指定.

  • null : 如果为True,则该字段在数据库中是空数据,默认值是 False

  • blank : 如果为True,则该字段允许为空白,默认值是 False

注意: null 是数据库范畴的概念,blank 是表单验证证范畴的

  • db_column : 字段的名称,如果未指定,则使用属性的名称

  • db_index : 若值为 True, 则在表中会为此字段创建索引

  • default : 默认值

  • primary_key : 若为 True, 则该字段会成为模型的主键字段

django会为表增加自动增长的主键列(ID),每个模型只能有一个主键列,如果使用选项设置某属性为主键列后,则django不会再生成默认的主键列。

  • unique : 如果为 True, 这个字段在表中必须有唯一值

补充

逻辑删除

对公司来说最重要的就是数据,删除数据的操作都是不可恢复的。所以在实际开发可能会对不需要的书进行删除,这种情况我们通常都是对数据做逻辑删除,不做物理删除,防止删除数据后,某些时候又需要该数据不能找回。那么什么是逻辑删除呢?逻辑删除就是在数据表中创建一个字段,这个字段通常是BooleanField,用True表示该数据有效,用False表示该数据无效被删除了。

作者:扯扯_2c79
链接:https://www.jianshu.com/p/d92ecd3644f7
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

Django(orm)转的更多相关文章

  1. django orm总结[转载]

    django orm总结[转载] 转载地址: http://www.cnblogs.com/linjiqin/archive/2014/07/01/3817954.html 目录1.1.1 生成查询1 ...

  2. Django ORM - 001 - 外键表查询主表信息

    开始用Django做web开发,我想大家都会遇到同样的问题,那就是如何高效快速的查询需要的数据,MVC都很简单,但是ORM折腾起来就有些费时间,我准备好好研究下Django ORM,所以会有一个系列的 ...

  3. Django ORM 中的批量操作

    Django ORM 中的批量操作 在Hibenate中,通过批量提交SQL操作,部分地实现了数据库的批量操作.但在Django的ORM中的批量操作却要完美得多,真是一个惊喜. 数据模型定义 首先,定 ...

  4. Django ORM 查询管理器

    Django ORM 查询管理器 ORM 查询管理器 对于 ORM 定义: 对象关系映射, Object Relational Mapping, ORM, 是一种程序设计技术,用于实现面向对象编程语言 ...

  5. Django ORM模型的一点体会

    作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载. 使用Python的Django模型的话,一般都会用它自带的ORM(Object-relational ma ...

  6. 数据库表反向生成(二) Django ORM inspectdb

    在前一篇我们说了,mybatis-generator反向生成代码. 这里我们开始说如何在django中反向生成mysql model代码. 我们在展示django ORM反向生成之前,我们先说一下怎么 ...

  7. Django ORM那些相关操作

    一般操作 https://docs.djangoproject.com/en/1.11/ref/models/querysets/         官网文档 常用的操作 <1> all() ...

  8. django orm 及常用参数

    一些说明: 表myapp_person的名称是自动生成的,如果你要自定义表名,需要在model的Meta类中指定 db_table 参数,强烈建议使用小写表名,特别是使用MySQL作为后端数据库时. ...

  9. Django ORM中,如何使用Count来关联对象的子集数量

    示例models 解决方法 有时候,我们想要获取一个对象关联关系的数量,但是我们不要所有的关联对象,我们只想要符合规则的那些关联对象的数量. 示例models # models.py from dja ...

  10. Django ORM存储datetime 时间误差8小时问题

    今天使用django ORM 将获取到的时间入库,并未出现问题,但是后来发现时间晚了8小时,经查询Django官方文档发现获取本地时间和UTC时间有差别. 首先科普下:UTC是协调世界时 UTC相当于 ...

随机推荐

  1. LVS之2---基于LVS负载均衡集群架构

    LVS之2---基于LVS负载均衡集群架构实现 目录 LVS之2---基于LVS负载均衡集群架构实现 ipvsadm software package Options 常用命令 保存及重载规则 内存映 ...

  2. Azure Databricks 第二篇:pyspark.sql 简介

    pyspark中的DataFrame等价于Spark SQL中的一个关系表.在pyspark中,DataFrame由Column和Row构成. pyspark.sql.SparkSession:是Da ...

  3. Windows搭建SkyWalking8.3环境进行JAVA应用性能监控及入门示例(使用Mysql持久化)

    下载SkyWalking 一.下载地址(点击) 选择tar 解压后进入config文件夹先配置一下Mysql数据源,打开application.yml文件 默认selector是h2我们改成mysql ...

  4. linux的 复制 删除 解压 压缩 打包

    liunx 删除 删除文件夹实例: rm -rf /var/log/httpd/access 将会删除/var/log/httpd/access目录以及其下所有文件.文件夹 2 删除文件使用实例: r ...

  5. JavaScript DOM编程艺术(第2版)的简单总结

    介绍 JavaScript DOM编程艺术(第2版)主要讲述了 JavaScript.DOM 和 HTML5 的基础知识,着重讲述了 DOM 编程,并通过几个实例演示了具有专业水准的网页开发. 下面介 ...

  6. 我的程序员之路:自学Java篇

    序章 时光疾驰,从事IT行业已两年有余. 16年11月开始自学Java,从此开启自学之路,后来实习期自学大数据.python.爬虫等,最终成长为一名平凡的程序员.回首望去,一路上的过往历历在目,有初学 ...

  7. 【MySQL 基础】MySQ LeetCode

    MySQL LeetCode 175. 组合两个表 题目描述 表1: Person +-------------+---------+ | 列名 | 类型 | +-------------+----- ...

  8. 【Spring】Spring中的Bean - 3、Bean的作用域

    Bean的作用域 简单记录-Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)-Spring中的Bean 通过Spring容器创建一个Bean的实例时,不仅可以完成 ...

  9. Databricks 第8篇:把Azure Data Lake Storage Gen2 (ADLS Gen 2)挂载到DBFS

    DBFS使用dbutils实现存储服务的装载(mount.挂载),用户可以把Azure Data Lake Storage Gen2和Azure Blob Storage 账户装载到DBFS中.mou ...

  10. PAT Advanced 1003 Emergency 详解

    题目与翻译 1003 Emergency 紧急情况 (25分) As an emergency rescue team leader of a city, you are given a specia ...