python—day60 Object Relational Mapping(ORM) ORM连表查询 ORM进阶

import os
if __name__ == '__main__':
    # 指定当前py脚本需要加载的Django项目配置信息
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'BookManageSystem.settings')
    # 启动Django项目
    import django
    django.setup()
    from app01 import models
    # 多对多操作
    # 1.create
    # 做了两件事情
    # 1.创建了一个名为ker1新的作者  2.将新创建的作者和第一本书做关联
    # ret = models.Book.objects.first().author.create(
    #     name='ker1',
    #     age=18,
    #     phone='1516165',
    #     detail_id=3
    # )

    # 查看到第一本书的所有作者,和id
    # ret = models.Book.objects.first().author.all()
    # ret = models.Book.objects.first().author.all().values('id')
    # print(ret)

    # 2.set
    # 通过给第一本书设置id为3和8的作者
    # models.Book.objects.first().author.set([3,8])
    # 查询第一本书的所有id
    # ret = models.Book.objects.first().author.all().values('id')
    # print(ret)

    # 3. add
    # 给第一本书添加一个id为8的作者对象
    # models.Book.objects.first().author.add(8)
    # ret = models.Book.objects.first().author.all().values('id')
    # print(ret)

    # 4.remove
    # 把第一本书的外键id为3的作者删除掉
    # models.Book.objects.first().author.remove(3)
    # ret = models.Book.objects.first().author.all().values('id')
    # print(ret)

    # 5.clear
    # 清除第一本书的所有作者
    # models.Book.objects.first().author.clear()
    # ret = models.Book.objects.first().author.all().values('id')
    # print(ret)

    # 6.all
    # 查看第一本书的对象的所有内容
    # ret = models.Book.objects.first().author.all()
    # print(ret)

    # 聚合
    # 查询所有书的总价格
    from django.db.models import Avg, Sum, Max, Min, Count

    # 用聚合函数之前需要调用aggregate(别名 = 里面写聚合函数('条件'))
    # 查到所有书的总价
    # ret = models.Book.objects.aggregate(sum_price=Sum('price'))
    # print(ret)

    # 查看平均价格\最大的价格\最小的价格
    # ret = models.Book.objects.aggregate(avg_pirce=Avg('price'),
    #                                     max_price=Max('price'),
    #                                     min_price=Min('price'))
    # print(ret)
    #
    # # 每一本书的作者个数
    # ret = models.Book.objects.annotate(c=Count('author')).values('title', 'c')
    # print(ret)
    #
    # # 统计出每个出版社买的最便宜的书的价格
    # ret = models.Publisher.objects.annotate(min_price=Min('books__price')).values('name', 'min_price')
    # print(ret)

    # 统计不止一个作者的图书 (书作者的数量大于1)
    # ret = models.Book.objects.annotate(c=Count('author')).filter(c__gt=1)
    # print(ret)

    # 按照书作者的数量做排序
    # ret = models.Book.objects.annotate(c=Count('author')).order_by('c')
    # print(ret)

    # 查询各个作者出的书的总价格 book__price 书表里面的所有价格综合
    # ret = models.Author.objects.annotate(sum_price=Sum('book__price')).values('name','sum_price')
    # print(ret)

猜你喜欢

转载自www.cnblogs.com/kermitjam/p/9210586.html
Orm
今日推荐