1. 程式人生 > 實用技巧 >Django-ORM-查詢API (連表查詢)

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'}]>