Python - Django - ORM 查询方法
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 中支持按字段去重) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |