zoukankan      html  css  js  c++  java
  • models -- 单表

      示例表:

    from django.db import models
    
    class Author(models.Model):
        name = models.CharField(max_length=30)
        age = models.IntegerField(blank=True, null=True)
        def __str__(self):
            return self.name
    

    单表的增删改查 crud

      • 增加数据
        • #方法一    
              Author.objects.create(name='Li')
          
          #方法二
              Author.objects.create(**{"name": "Zhang"})
          
          #方法三
              obj = Author(name='xiaoming')
              obj.save()
          
          #方法四
              obj = Author()
              obj.name = 'Wang'
              obj.save()
          
      • 删除数据
        • Author.objects.filter(id=1).delete()
          
      • 修改数据

        • #方法一
              Author.objects.filter(id=3).update(name='xiaodong')
          
          #方法二
              obj = Author.objects.get(id=3)
              obj.name = 'xiaoze'
              obj.save()
          

           注:方法二不能使用update方法的原因:update是QuerySet对象的方法,get返回的是一个model对象,它没有update方法,而 filter返回的是一个QuerySet对象。get只能做单行数据的查询,如果查询到的结果是多行的,则会报错

      • 查询数据 -- all和filter查询返回的都是queryset , queryset是一个有序的列表,列表中的元素是model对象
        • all()
          • Author.objects.all()
          • 取所有的数据行
          • 返回 [<Author: xiaoze>, <Author: Li>, <Author: xiaoming>, <Author: xiaoming>]
        • get(**kwargs)
          • Author.objects.get(id=3)
          • 取id=3的数据行
          • 返回model对象,由于Author类有__str__方法,所以返回xiaoming
          • 查询的结果必须是单行数据  
        • filter(**kwargs)
          • Author.objects.filter(name='xiaoming')   
          • 取name='xiaoming'的所有数据行
          • 返回 [<Author: xiaoming>, <Author: xiaoming>]
          • Author.objects.filter(name='xiaoming')[0] 
          • 取第一行数据
          • 返回 model对象,由于Author类有__str__方法,所以返回xiaoming
          • Author.objects.filter(name='xiaoming', id='6')
          • 逗号分隔,表示and,取name='xiaoming'并且id='6'的数据行
          • 返回[<Author: xiaoming>]
        • values(*field)
          • Author.objects.filter(name='xiaoming').values('age', 'name')
          • 查询name='xiaoming'的数据行,并只展示age和name字段
          • 返回 [{'age': 20, 'name': 'xiaoming'}, {'age': 30, 'name': 'xiaoming'}] 
        • values_list(*field)
          • Author.objects.filter(name='xiaoming').values_list('age', 'name')
          • 查询name='xiaoming'的数据行,并只展示age和name字段
          • 返回 [(20, 'xiaoming'), (30, 'xiaoming')] 
        • exclude(**kwargs)
          • Author.objects.filter(name='xiaoming').exclude(age=30)
          • 查询name='xiaoming',并且age不为30的数据行
          • 返回 [<Author: xiaoming>] 
          • Author.objects.exclude(name='xiaoming')
          • 查询name不为xiaoming的数据行
          • 返回 [<Author: xiaoze>, <Author: Li>]
        • order_by(*field)
          • Author.objects.order_by('id')
          • 按id升序查询
          • 返回[<Author: Wang>, <Author: xiaoming>]  
          • Author.objects.order_by('-id')
          • 按id降序查询
          • 返回 [<Author: xiaoming>, <Author: Wang>]
        • exists()
          • Author.objects.exists()
          • 如果queryset有数据,则返回True,否则返回False
  • 相关阅读:
    一个iOS程序员眼中的跨域问题
    web 大规模并发访问的解决方案
    修改Capfile,在正式环境不再使用migration修改数据库
    关于 CAS 不能登录的问题
    老项目占地比较大的原因是release文件夹里有.git 目录
    capistrano3.4.0部署不能自动登录
    capistrano/blob/v3.4.0部署
    私有方法的查找方式
    开启关闭功能没有生效的原因
    找不到Settings
  • 原文地址:https://www.cnblogs.com/dongmengze/p/9700562.html
Copyright © 2011-2022 走看看