• Django ORM单表操作常用字段


    1、创建Django项目

    #在app的models.py中写入:
    class User(models.Model):
        name = models.CharField(max_length=32)
        age = models.IntegerField()
        register_time = models.DateField()


    2、单独的py文件测试ORM操作

    #单独的py文件测试ORM操作需要先配置以下内容
    import os
    
    if __name__ == "__main__":
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day58.settings")
        import django
        django.setup()
        from app01 import models    # 这一句话必须在最下面导入


    3、测试ORM的python文件

    import os
    
    if __name__ == "__main__":
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day58.settings")
        import django
        django.setup()
        from app01 import models
    
        # 新增数据
        # 基于create创建
        user_obj = models.User.objects.create(name='tank',age=73,register_time='2019-2-14')
        print(user_obj.register_time)
        # 基于对象的绑定方法创建
        user_obj = models.User(name='kevin',age=30,register_time='2019-1-1')
        user_obj.save()
        from datetime import datetime
        ctime = datetime.now()
        models.User.objects.create(name='egon', age=18, register_time=ctime)
    
    
        # 修改数据
        # 基于对象
        user_obj = models.User.objects.filter(name='jason').first()
        user_obj.age = 17
        user_obj.save()
        # 基于queryset
        models.User.objects.filter(name='kevin').update(age=66)
    
    
        # 删除数据
        # 基于queryset
        models.User.objects.filter(name='egon').delete()
        # 基于对象
        user_obj = models.User.objects.filter(name='owen').first()
        user_obj.delete()
    
    
        # 查询数据
        # < 1 > all(): 查询所有结果
    
        # < 2 > filter(**kwargs): 它包含了与所给筛选条件相匹配的对象
        # filter内可以放多个限制条件但是需要注意的是多个条件之间是and关系
        res = models.User.objects.filter(name='jason',age=17)
        print(res)
    
        # < 3 > get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。
        # 不推荐使用
    
        # < 4 > exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象
        res = models.User.objects.exclude(name='jason')
        print(res)
    
        # < 5 > order_by(*field): 对查询结果排序('-id') / ('price')
        res = models.User.objects.order_by('age')   # 默认是升序
        res = models.User.objects.order_by('-age')  # 可以在排序的字段前面加一个减号就是降序
        res = models.User.objects.order_by('name')
        res = models.User.objects.order_by('-name')
        print(res)
    
        # < 6 > reverse(): 对查询结果反向排序 >> > 前面要先有排序才能反向
        res = models.User.objects.order_by('age').reverse()
        print(res)
    
        # < 7 > count(): 返回数据库中匹配查询(QuerySet) 的对象数量。
        res = models.User.objects.count()
        res = models.User.objects.all().count()
        print(res)
    
        # < 8 > first(): 返回第一条记录
        res = models.User.objects.all().first()
        res = models.User.objects.all()[0]  # 不支持负数的索引取值
        print(res)
    
        # < 9 > last(): 返回最后一条记录
        res = models.User.objects.all().last()
        print(res)
    
        # < 10 > exists(): 如果QuerySet包含数据,就返回True,否则返回False
        res = models.User.objects.all().exists()
        res1 = models.User.objects.filter(name='jason',age=3).exists()
        print(res,res1)
    
        # < 11 > values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列model的实例化对象,
        而是一个可迭代的字典序列
        res = models.User.objects.values('name')  # 列表套字典
        res = models.User.objects.values('name','age')  # 列表套字典
        print(res)
    
        # < 12 > values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
        res = models.User.objects.values_list('name','age')  # 列表套元祖
        print(res)
    
        # < 13 > distinct(): 从返回结果中剔除重复纪录  去重的对象必须是完全相同的数据才能去重
        res = models.User.objects.values('name','age').distinct()
        print(res)
    
    
        # 神奇的双下划线查询
        # 查询年龄大于44岁的用户
        res = models.User.objects.filter(age__gt=44)
        print(res)
        # 查询年龄小于44岁的用户
        res = models.User.objects.filter(age__lt=44)
        print(res)
        # 查询年龄大于等于44岁的用户
        res = models.User.objects.filter(age__gte=44)
        print(res)
        # 查询年龄小于等于44岁的用户
        res = models.User.objects.filter(age__lte=44)
        print(res)
    
        # 查询年龄是44或者22或者73的用户
        res = models.User.objects.filter(age__in=[44,22,73])
        print(res)
    
        # 查询年龄在22到44范围内
        res = models.User.objects.filter(age__range=[22,44])
        print(res)
    
    
        # 用的是mysql数据库
        # 查询年份
        res = models.Book.objects.filter(publish_date__year=2019)
        print(res)
    
    
        # 查询名字中包含字母n的用户  sqlite数据库演示不出来大小写的情况!!!
        res = models.Author.objects.filter(name__contains='n')
        res = models.Author.objects.filter(name__icontains='n')
        print(res)
        res = models.User.objects.filter(name__icontains='e')  # 无视大小写
        print(res)
    
        # 查询名字以j开头的用户
        res = models.User.objects.filter(name__startswith='j')
        print(res)
        # 查询名字以n结尾的用户
        res = models.User.objects.filter(name__endswith='n')
        print(res)
    
        # 查询注册是在2017年的用户
        res = models.User.objects.filter(register_time__year=2017)  # sqlite对日期格式不太精准
        print(res)


    4、13个必会操作总结

    返回QuerySet对象的方法有:
    all()
    filter()
    exclude()
    order_by()
    reverse()
    distinct()
    
    特殊的QuerySet:
    values()       返回一个可迭代的字典序列
    values_list() 返回一个可迭代的元祖序列
    
    返回具体对象的:
    get()
    first()
    last()
    
    返回布尔值的方法有:
    exists()
    
    返回数字的方法有:
    count()


    5、只要是queryset对象就可以无限制的点queryset方法

    models.User.objects.filter().filter().filter().count()
  • 相关阅读:
    linux 下使用scp命令传输文件
    yii2使用vendor文件夹下的的css文件
    yii2中使用定义在 params.php文件中的配置
    PHP Catchable fatal error: Argument 2 passed to IlluminateRoutingUrlGenerator::__construct()
    git 去除本地所有没有保存的修改
    学习修复Laravel The only supported ciphers are AES-128-CBC and AES-256-CBC
    [190308]Ubuntu 安装完之后,安装的软件小记
    swagger.yaml转换为swagger.json文件
    Linux sed -i 字符串替换
    [笔记]Laravel TDD 胡乱记录
  • 原文地址:https://www.cnblogs.com/weiyiming007/p/12361655.html
Copyright © 2020-2023  润新知