import osif __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 注意:没查的字段不要再用了