Django-ORM-查詢API (連表查詢)
有Book表——單表查詢:
查詢Book表中所有的物件:Book.objects.all() ————物件集合
按條件過濾:Book.objects.filter(id=1) ————物件集合
Book.objects.get(id=1) ————物件
queryset.first()、queryset.last()得到的都是物件
———————————————————————————————————————————————————————————————————————————————
連表查詢:
有Book (id, title, price,date, publish)、Publish (id, name, addr)、Author (id, name)三張表:
Book表和Publish表是一對多的關係,Book與Author表是多對多的關係。
class Publish(models.Model): name = models.CharField() addr = models.CharField() class Author(models.Model): name = models.CharField() book = models.ManyToManyField('Book') class Book(models.Model): title = models.CharField() price= models.IntegerField() date = models.DateField() publish = models.ForeignKey('Publish')
查詢《百年孤獨》的出版社: Book.objects.filter(title='百年孤獨').first().publish.name ————正向查詢
查詢 魔幻出版社 出版過的所有書籍:book_list=Publish.objects.get(name='魔幻出版社').book_set.all() ————反向查詢(注意publish物件的book_set屬性)
通過values & filter配合雙下劃線__來查詢(*****):
先看一個簡單的單表查詢:查詢《百年孤獨》的價格:Book.objects.filter(title='百年孤獨').values('price') ————包含字典的集合物件:<QuerySet [{'price': Decimal('99.00')}]>
查詢《百年孤獨》的出版社(正向):Book.objects.filter(title='百年孤獨').values('publish__name') ————<QuerySet [{'publish__name': '魔幻現實出版社'}]>
查詢《百年孤獨》的出版社(反向):Publish.objects.filter(book__title='百年孤獨').values('name') ————<QuerySet [{'name': '魔幻現實出版社'}]>
價格大於100的書籍的所有作者:
1、Book.objects.filter(price__gt=100).values('authors__name')
————<QuerySet [{'authors__name': '陳冠希'}, {'authors__name': '蘭陵笑笑生'}, {'authors__name': 'peterpan'}]>
2、Author.objects.filter(book__price__gt=100).values('name')
————<QuerySet [{'name': '陳冠希'}, {'name': '蘭陵笑笑生'}, {'name': 'peterpan'}]>