Python - Django - ORM QuerySet 方法补充

Posted sch01ar

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python - Django - ORM QuerySet 方法补充相关的知识,希望对你有一定的参考价值。

models.py:

from django.db import models


class Employee2(models.Model):
    name = models.CharField(max_length=16)
    age = models.IntegerField()
    salary = models.IntegerField()
    province = models.CharField(max_length=32)
    dept = models.ForeignKey(to="Dept")

    def __str__(self):
        return self.name

    class Meta:
        db_table = "employee2"


class Dept(models.Model):
    name = models.CharField(max_length=16, unique=True)

    def __str__(self):
        return self.name

    class Meta:
        db_table = "dept2"

employee2 表:

技术图片

dept2 表:

技术图片

 

select_related:

select_related 将表之间进行 join 连表操作,一次性获取关联的数据

select_related 主要针一对一和多对一关系进行优化

select_related 使用 SQL 的 join 语句进行优化,通过减少 SQL 查询的次数来进行优化、提高性能

orm.py:

import os

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

    from app04 import models

    ret = models.Employee2.objects.select_related().values("name", "dept__name")
    print(ret)

 运行结果:

技术图片

 也可以用:

ret = models.Employee2.objects.values("name", "dept__name")
print(ret)

进行查询

 

bulk_create:

bulk_create(objs, batch_size=None)
批量插入 objs,batch_size 为一次插入的个数

orm.py:

import os

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

    from app04 import models

    objs = [
        models.Dept(name="A 部门"),
        models.Dept(name="B 部门"),
        models.Dept(name="C 部门"),
        models.Dept(name="D 部门"),
        models.Dept(name="E 部门"),
        models.Dept(name="F 部门"),
        models.Dept(name="G 部门"),
        models.Dept(name="H 部门"),
        models.Dept(name="I 部门"),
        models.Dept(name="J 部门"),
    ]
    models.Dept.objects.bulk_create(objs, 2)

运行结果,dept2 表:

技术图片

 

以上是关于Python - Django - ORM QuerySet 方法补充的主要内容,如果未能解决你的问题,请参考以下文章

python-django框架-orm相关继续&ORM的增删改查操作_20191110

Python全栈之路--Django ORM详解

Python/Django(CBA/FBA/ORM操作)

python django ORM

python3开发进阶-Django框架的起飞加速一(ORM)

Django vs SQLAlchemy:哪个 Python ORM 更好