Python - Django - ORM 查询方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python - Django - ORM 查询方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5546字,纯文字阅读大概需要8分钟。
内容图文
![Python - Django - ORM 查询方法](/upload/InfoBanner/zyjiaocheng/740/1897df9bb678438f9c8e8fe532961a06.jpg)
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 查询方法全部内容,希望文章能够帮你解决Python - Django - ORM 查询方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。