• django手动建第三张关系表的增删改查


    import os
    if __name__ == '__main__':
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day84.settings")
        import django
        django.setup()
        # 手动创建第三张表的第一种方式(比较麻烦)
        from app01 import models
        # 给xxx这本书新增lqz和egon两个作者(增)
        # models.Book2Author.objects.create(book_id=1,author_id=1)
        # models.Book2Author.objects.create(book_id=1,author_id=2)
        # 删 把两个作者都删除
        # ret=models.Book2Author.objects.filter(book_id=1).delete()
        # 查询xxx这本书所有的作者
        # book=models.Book.objects.get(pk=1)
        # # book.auhtors
        # ret=models.Book2Author.objects.filter(book_id=book.pk)
        # for i in ret:
        #     print(i.author.name)
        # 基于双下划线查询
        # ret = models.Book.objects.filter(name='红楼梦').values('authors__name')
        # print(ret)
    
    
    
        # 既能用orm的关联查询,又能手动创建第三张表
    
        # add,clear,remove,set:都用不了了
        # 增,删,改:用表模型操作
        # 用表模型
        # 查询xxx这本书所有的作者
        # book1 = models.Book1.objects.get(pk=1)
        # authors=book1.authors.all()
        # for author in authors:
        #     print(author.name)
        # 基于双下划线的查询
        # ret=models.Book1.objects.filter(name='红楼梦').values('authors__name')
        # print(ret)
    
        # ret=models.Book2Author1.objects.create(book_id=1,author_id=2)
    
    
        # 以后用:
        #     -如果第三张表中没有其它字段,直接让它自动创建
        #     -如果第三张表中有其它字段,手动创建第三张表,并且,用ManyToManyField做关联
        # -用了ManyToManyField做了关联的作用是什么?(跟自动创建第三张表的所有的查询是一样的)
    
        # add, clear, remove, set: 都用不了了
        # 给红楼梦这本书添加egon作者
        # book=models.Book1.objects.get(pk=1)
        # egon=models.Author1.objects.get(pk=2)
        # book.authors.add(egon)
    
        # defer和only(高级阶段,提高查询效率)
        # ret=models.Book1.objects.all().values('id','name')
        # ret=models.Book1.objects.all().only('name')
        # ret=models.Book1.objects.all()
        # # 比如有10条数据---11句sql
        # for book in ret:
        #     # print(book.id)
        #     print(book.name)
        #     # 也有(不能这么写)
        #     print(book.price)
        ret = models.Book1.objects.all().defer('id','name','publish_id')
        for book in ret:
            print(book.price)
            # print(book.publish)
            # print(book.name)
    
        # 总结
        # only和defer 返回结果是queryset对象内包裹表模型的对象
        # only,就是只查我指定的字段,一定会包含id   注意:没查的字段不要再用了
        # defer,指定不取哪个字段,一定会包含id     注意:没查的字段不要再用了
  • 相关阅读:
    使windows server 2003 开机不显示登录页面
    G
    D
    三分求函数极值详解
    H
    G
    E
    D
    A
    B
  • 原文地址:https://www.cnblogs.com/zhouhai007/p/10279447.html
Copyright © 2020-2023  润新知