数据库(三)--多对多,一对多,一对一
发布时间:2020-12-15 17:08:14 所属栏目:大数据 来源:网络整理
导读:我们有四张表: person_publisher ? ?person_book ? ?person_author ? ?person_author_book ? 接下来分别从正向查询(子表--主表)和反向查询(主表--子表)进行。 1.一对一 正向查询:查询book中id=2(python)对应的出版社 book_obj=models.Book.objects.g
我们有四张表: ? ?person_book ? ?person_author ? ?person_author_book ? 接下来分别从正向查询(子表-->主表)和反向查询(主表-->子表)进行。 1.一对一 正向查询:查询book中id=2(python)对应的出版社 book_obj=models.Book.objects.get(id=2) print(book_obj) print(book_obj.publisher.name) 反向查询:查询publisher中id=1(清华大学出版社)对应的book publisher_obj=models.Publisher.objects.get(id=1(publisher_obj) ? ?2.一对多 正向查询:查询book中id=3(java)对应的出版社 book_obj=models.Book.objects.get(id=3print(book_obj.publisher.name)
反向查询:查询publisher中id=3(广州大学出版社)对应的book publisher_obj=models.Publisher.objects.get(id=3(publisher_obj) print(publisher_obj.book_set.all()) ? 那么,我们要是想查询python是由那几家出版社出版的(虽然一般只是一家) ,我们可以这样做: book_obj=models.Book.objects.filter(title='python'for i in book_obj: print(i.publisher) 其实,我们发现一对一和一对多查询基本上是差不多的。 3.多对多 正向查询:查询作者名为gong的所有book author_obj=models.Author.objects.get(name=gongprint(author_obj.book.all()) ? ?反向查询:查询书为"网络基础"的所有作者 book_obj=models.Book.objects.get(title=网络基础print(book_obj.author_set.all()) ? ?总而言之,正向查询直接顺序获取,反向查询用 类名(全部小写)_set.all()?来获取。 弄了一天,总算初步理解了咋弄的。!! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |