zoukankan      html  css  js  c++  java
  • 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'}]>

      

      

    Life is short,i use python!
  • 相关阅读:
    Linux(CentOS 7)命令行模式安装VMware Tools 详解
    最全面的移动APP测试点
    利用Fiddler编写Jmeter接口测试
    LeetCode | TwoSum
    Python
    Django
    浅谈web网站架构演变过程
    Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
    Web服务器之Nginx详解(操作部分)
    Web服务器之Nginx详解(理论部分)
  • 原文地址:https://www.cnblogs.com/chengnanlangzi/p/7461226.html
Copyright © 2011-2022 走看看