zoukankan      html  css  js  c++  java
  • Django orm查询操作

    基于双下划线查询
    切记!!!!正向查询按字段,反向查询按表名的小写
    正向:在Book表里设置关联Obj表,Book------>Obj就是正向查询
    反向:在Book表里设置关联Obj表,Obj------>Book就是反向查询

    废话不多说,直接上例子:

     

    数据
    class Book(models.Model):
        nid=models.AutoField(primary_key=True)
        title=models.CharField(max_length=32)
        price=models.DecimalField(max_digits=8,decimal_places=2) # 999999.99
        pub_date=models.DateTimeField()  # "2012-12-12"
        publish=models.ForeignKey(to="Publish",on_delete=models.CASCADE)  # 级联删除
        authors=models.ManyToManyField(to="Author")
        def __str__(self):
            return self.title
    
    
    class Publish(models.Model):
        nid = models.AutoField(primary_key=True)
        name=models.CharField(max_length=32)
        email=models.CharField(max_length=32)
        def __str__(self):
            return self.name
    
    class Author(models.Model):
        nid = models.AutoField(primary_key=True)
        name=models.CharField(max_length=32)
        age=models.IntegerField()
        email=models.CharField(max_length=32)
        ad=models.OneToOneField(to="AuthorDetail",on_delete=models.CASCADE)
        def __str__(self):
            return self.name
    
    class AuthorDetail(models.Model):
        addr=models.CharField(max_length=32)
        tel=models.IntegerField()
        def __str__(self):
            return self.addr

    以上是4张表,实际在操作中是5张表,有一张虚拟的表,Django自动给我们创建的

    一下是各种查询的练习题

     1 查询python这本书出版社的名字
     2 查询人民日报出版社出版的所有的书籍的名称
    3 查询python这本书籍的作者的年龄
    4 查询李二短出版过的所有的书籍名称
    5 查询任康娜的手机号
    6 查询手机号为234的作者的名字
    7查询老男孩出版社出版过的所有书籍的名字以及作者的姓名
    8手机号以132开头的作者出版过的所有书籍名称以及出版社名称

    答案:

    1 查询python这本书出版社的名字
         正向:ret = Book.objects.filter(title='python').values('publish__name')
         反向:ret = Publish.objects.filter(book__title='python').values('name')
         print(ret)
      
    2 查询人民日报出版社出版的所有的书籍的名称 ret = Publish.objects.filter(name='人民日报出版社').values('book__title')
       ret = Book.objects.filter(Publish__name='人民日报出版社').values('title')
        print(ret) 

    3 查询python这本书籍的作者的年龄
      ret
    = Book.objects.filter(title='python').values('authors__age')
      ret = Authors.objects.filter(book__title='python').values('age')
      print(ret)
    (以下反向查询不一一列举,具体参考前3个)

    4 查询李二短出版过的所有的书籍名称
      ret
    = Author.objects.filter(name='李二短').values('book__title') print(ret)
      
    5 查询任康娜的手机号
      ret
    = Author.objects.filter(name='任康娜').values('ad__tel') print(ret)

    6 查询手机号为234的作者的名字
      ret
    = AuthorDetail.objects.filter(tel=234).values('author__name') print(ret)

    7查询老男孩出版社出版过的所有书籍的名字以及作者的姓名
      ret
    = Publish.objects.filter(name='老男孩出版社').values('book__title','book__authors__name') print(ret)

    8手机号以132开头的作者出版过的所有书籍名称以及出版社名称
      ret
    = AuthorDetail.objects.filter(tel__startswith=345).values('author__book__title','author__book__publish__name') print(ret)
  • 相关阅读:
    【VUE】父子组件通信
    【mysql】密码重设
    Joomla 3.2.0
    浅谈内网渗透
    使用Fiddler的X5S插件查找XSS漏洞
    Asp文件锁定脚本
    php内网探测脚本&简单代理访问
    Linux关闭休眠和屏保模式
    不重启修改计算机名【批处理】
    mimikatz不反弹读取密码
  • 原文地址:https://www.cnblogs.com/lzqrkn/p/9858372.html
Copyright © 2011-2022 走看看