models.py:

from django.db import models

class Human(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
age = models.IntegerField()
birthday = models.DateField(auto_now_add=True)

在数据库中添加几条数据

在 Python 脚本中调用 Django 环境:

在 mysite2 下创建 orm_test.py

在 orm_test.py 中添加以下内容:

import os

if __name__ == '__main__':
# 加载 Django 项目的配置信息
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
# 导入 Django,并启动 Django 项目
import django
django.setup()

ORM 操作:

all():查询所有结果

orm_test.py:

import os

if __name__ == '__main__':
# 加载 Django 项目的配置信息
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
# 导入 Django,并启动 Django 项目
import django
django.setup() from app01 import models ret = models.Human.objects.all()
print(ret)

运行结果:

返回 QuerySet 对象,QuerySet 对象继承列表,所以可以使用列表的操作

get():返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。

import os

if __name__ == '__main__':
# 加载 Django 项目的配置信息
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
# 导入 Django,并启动 Django 项目
import django
django.setup() from app01 import models ret_id = models.Human.objects.get(id=2)
print(ret_id)
ret_name = models.Human.objects.get(name="Alex")
print(ret_name)

运行结果:

filter():返回与所给筛选条件相匹配的对象

import os

if __name__ == '__main__':
# 加载 Django 项目的配置信息
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
# 导入 Django,并启动 Django 项目
import django
django.setup() from app01 import models ret = models.Human.objects.filter(id=3)
print(ret)

运行结果:

返回了一个列表

如果没有匹配上的话,不会报错,会返回一个空值

exclude():返回与所给筛选条件不匹配的对象

import os

if __name__ == '__main__':
# 加载 Django 项目的配置信息
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
# 导入 Django,并启动 Django 项目
import django
django.setup() from app01 import models ret = models.Human.objects.exclude(id=1)
print(ret)

运行结果:

返回除 id=1 外的所以数据

values():返回一个 ValueQuerySet,一个特殊的 QuerySet,运行后得到的并不是一系列 model 的实例化对象,而是一个可迭代的字典序列

import os

if __name__ == '__main__':
# 加载 Django 项目的配置信息
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
# 导入 Django,并启动 Django 项目
import django
django.setup() from app01 import models # 返回所有字段名为 name 的数据
ret = models.Human.objects.values("name")
print(ret) # 返回所有字段名为 name 和 birthday 的数据
ret1 = models.Human.objects.values("name", "birthday")
print(ret1)

运行结果:

返回的是字典类型

values_list():与 values() 相似,它返回的是一个元组序列,values 返回的是一个字典序列

import os

if __name__ == '__main__':
# 加载 Django 项目的配置信息
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
# 导入 Django,并启动 Django 项目
import django
django.setup() from app01 import models ret = models.Human.objects.values_list("name")
print(ret)

运行结果:

count():返回数据库中匹配查询 QuerySet 的对象个数

import os

if __name__ == '__main__':
# 加载 Django 项目的配置信息
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
# 导入 Django,并启动 Django 项目
import django
django.setup() from app01 import models ret = models.Human.objects.all().count()
print(ret)

运行结果:

first():返回第一条记录

import os

if __name__ == '__main__':
# 加载 Django 项目的配置信息
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
# 导入 Django,并启动 Django 项目
import django
django.setup() from app01 import models ret = models.Human.objects.all().first()
print(ret)

运行结果:

last():返回最后一条记录

import os

if __name__ == '__main__':
# 加载 Django 项目的配置信息
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
# 导入 Django,并启动 Django 项目
import django
django.setup() from app01 import models ret = models.Human.objects.all().last()
print(ret)

运行结果:

exists():如果 QuerySet 包含数据,就返回 True,否则返回 False

import os

if __name__ == '__main__':
# 加载 Django 项目的配置信息
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
# 导入 Django,并启动 Django 项目
import django
django.setup() from app01 import models ret = models.Human.objects.all().exists()
print(ret)

运行结果:

order_by():对查询结果按照某字段进行排序

import os

if __name__ == '__main__':
# 加载 Django 项目的配置信息
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
# 导入 Django,并启动 Django 项目
import django
django.setup() from app01 import models ret = models.Human.objects.order_by("name")
print(ret)

运行结果:

name 按照字母顺序进行了排序

在生成表的时候也可以指定默认的排序方法

models.py:

from django.db import models

class Human(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
age = models.IntegerField()
birthday = models.DateField(auto_now_add=True) def __str__(self):
return "<Human Object: {}>".format(self.name) # 按照 name 排序
class Meta:
ordering = ("name",)

这样生成的表在数据中就按 name 的字母顺序来排序

reverse():对查询结果反向排序

reverse() 通常只能在具有已定义顺序的 QuerySet 上调用(在model 类的 Meta 中指定 ordering 或调用 order_by() 方法)

import os

if __name__ == '__main__':
# 加载 Django 项目的配置信息
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
# 导入 Django,并启动 Django 项目
import django
django.setup() from app01 import models ret = models.Human.objects.order_by("name").reverse()
print(ret)

运行结果:

distinct():从返回结果中剔除重复纪录(如果查询跨越多个表,可能在计算 QuerySet 时得到重复的结果。此时可以使用 distinct(),注意只有在 PostgreSQL 中支持按字段去重)

Python - Django - ORM 查询方法的更多相关文章

  1. Python - Django - ORM QuerySet 方法补充

    models.py: from django.db import models class Employee2(models.Model): name = models.CharField(max_l ...

  2. Django ORM 查询管理器

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

  3. django orm查询和后端缓存的使用

    django orm 查询 1 字段后(db_column='age') (null=True)#表示数据库里面的该字段数据可以为空 (blank=True)#表示前端表单提交的时候可以为空 (db_ ...

  4. django学习-15.ORM查询方法汇总

    1.前言 django的ORM框架提供的查询数据库表数据的方法很多,不同的方法返回的结果也不太一样,不同方法都有各自对应的使用场景. 主要常用的查询方法个数是13个,按照特点分为这4类: 方法返回值是 ...

  5. Django 源码小剖: Django ORM 查询管理器

    ORM 查询管理器 对于 ORM 定义: 对象关系映射, Object Relational Mapping, ORM, 是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换.从 ...

  6. Python学习---ORM查询之基于对象的正向/反向/聚合/分组/Q/F查询

    ORM查询之基于对象的正向查询与反向查询 对象形式的查询 # 正向查询 ret1=models.Book.objects.first() print(ret1.title) print(ret1.pr ...

  7. 关于Django ORM filter方法小结

    django filter是一个过滤器,相当于SQL的select * from where. filter返回一个QuerySet对象,还可以在该对象上继续进行django orm 该有的操作. 有 ...

  8. Python - Django - ORM 多对多表结构的三种方式

    多对多的三种方式: ORM 自动创建第三张表 自己创建第三张表, 利用外键分别关联作者和书,关联查询比较麻烦,因为没办法使用 ORM 提供的便利方法 自己创建第三张表,使用 ORM 的 ManyToM ...

  9. Python Django中一些少用却很实用的orm查询方法

    一.使用Q对象进行限制条件之间 "或" 连接查询 from django.db.models import Q from django.contrib.auth.models im ...

随机推荐

  1. PostgreSQL 恢复大法 - 恢复部分数据库、跳过坏块、修复无法启动的数据库

    转载自:https://yq.aliyun.com/articles/582880 背景 一个较大的数据库,如何只恢复一部分数据(例如只恢复某个DB). 如果访问有坏块的表. 如何从无法启动的数据库中 ...

  2. noi.ac #46 最长上升子序列

    \(des\) 长度为 \(n\) 的序列 \(A\),从中删去恰好 \(k\) 个元素(右边的元素往左边移动),记 \(cnt\) 为新 序列中 \(Ai = i\) 的元素个数(即权值与下标相同的 ...

  3. codevs 2058 括号序列

    2058 括号序列  时间限制: 2 s  空间限制: 128000 KB  题目等级 : 白银 Silver 题解       题目描述 Description 定义满足以下规则字符串为规则序列,否 ...

  4. 从Word到WinEdit的复制

    从Word像WinEdt复制文档时,发现如下问题: 后来网上搜索,参考http://blog.csdn.net/fht1051066200/article/details/38241059 中的说法: ...

  5. Linux安装php yaml扩展

    1.首先得安装libyamlgit clone https://github.com/yaml/libyaml./bootstrap ./configure make make install 2.安 ...

  6. Mac 上 QuickTime Player 播放器以 1.1、1.2 倍速等更精确速度快进/快退播放的方法

    苹果的 QuickTime Player 播放器上点击双箭头按钮可以用 2.4.8 倍的速度快进/快退播放视频,但是 2 倍速太快了,如果我想以 1.1.1.2 倍速这种更精确的速度控制视频播放呢?按 ...

  7. [SDOI2009][BZOJ 1876]SuperGCD

    Description Sheng bill有着惊人的心算能力,甚至能用大脑计算出两个巨大的数的GCD(最大公约 数)!因此他经常和别人比 赛计算GCD.有一天Sheng bill很嚣张地找到了你,并 ...

  8. Android中相对布局的两个控件

    <Button android:id="@+id/button3" android:layout_width="wrap_content" android ...

  9. IIS7 伪静态 web.config 配置方法【详解】

    IIS7 做伪静态比较的简单方便 1.程序方面 只需要设置web.config 就可以了. 2.服务器需要安装:URL Rewrite 下载地址:http://www.iis.net/download ...

  10. jquery选择器(1)

    jQuery 元素选择器 jQuery 使用 CSS 选择器来选取 HTML 元素. $("p") 选取 <p> 元素. $("p.intro") ...