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     注意:没查的字段不要再用了
  • 相关阅读:
    二、MyBatis教程之三—多参数的获取方式
    js 编写一道程序题输入长和宽之后点击按钮可弹出长方形面积。
    js 收银元小程序
    文字特效text-shadow HTML+css
    跳动的心 有阴影 跳动
    table框的切换
    jquery选择器是什么?
    随机数Math.random()
    双色球随机数字
    Angularjs 算法//姓名//自定义标签
  • 原文地址:https://www.cnblogs.com/zhouhai007/p/10279447.html
Copyright © 2011-2022 走看看