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 表:

 

posted @ 2019-08-09 00:27  Sch01aR#  阅读(368)  评论(0编辑  收藏  举报