zoukankan      html  css  js  c++  java
  • 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     注意:没查的字段不要再用了
  • 相关阅读:
    高级映射之事务
    配置tomcat-users.xml文件
    动态SQL之标签
    性能测试
    Service
    添加 aar 或 jar 包依赖 的方式
    安卓设备 以太网代理 问题排查
    剑指offer:面试题15、链表中倒数第 K 个结点
    剑指offer:面试题14、调整数组顺序使奇数位于偶数前面
    剑指offer:面试题13、在O(1)时间删除链表结点
  • 原文地址:https://www.cnblogs.com/zhouhai007/p/10279447.html
Copyright © 2011-2022 走看看