• djang 之数据库单表操作


    13个必会操作总结:

    查询方法:

    <1> all(): 查询所有结果
    <2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象
    <3> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。
    <4> exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象
    <5> order_by(*field): 对查询结果排序('-id')/('price')

    <6> reverse(): 对查询结果反向排序 >>>前面要先有排序才能反向
    <7> count(): 返回数据库中匹配查询(QuerySet)的对象数量。
    <8> first(): 返回第一条记录
    <9> last(): 返回最后一条记录
    <10> exists(): 如果QuerySet包含数据,就返回True,否则返回False
    <11> values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列 model的实例化对象,而是一个可迭代的字典序列
    <12> values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
    <13> distinct(): 从返回结果中剔除重复纪录

    返回QuerySet对象的方法有

    all()

    filter()

    exclude()

    order_by()

    reverse()

    distinct()

    特殊的QuerySet

    values()       返回一个可迭代的字典序列

    values_list() 返回一个可迭代的元祖序列

    返回具体对象的

    get()

    first()

    last()

    返回布尔值的方法有:

    exists()

    返回数字的方法有

    count()

    例子:

    models:

    from django.db import models
    
    # Create your models here.
    
    class User(models.Model):
        name = models.CharField(max_length=32)
        age = models.IntegerField()
        register_time = models.DateField()
    
        def __str__(self):
            return "对象的名字%s" % self.name
    View Code

    单表操作

    from django.test import TestCase
    
    # Create your tests here.
    import os
    import sys
    
    if __name__ == "__main__":
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "untitled_orm.settings")
        import django
        django.setup()
        from app01 import models
    
        # 新增数据  只要是queryset对象就可以无限制的点queryset方法
        # models.User.objects.filter().filter().count()
    
    
        # 基于create创建-
        # user_obj = models.User.objects.create(name='egon1', age=38, register_time="2017-7-1")
        # 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')
        # print(user_obj)  # <QuerySet [<User: User object>, <User: User object>]>
    
        # 基于对象的
        # user_obj = models.User.objects.filter(name='jason').first()
        # print(user_obj)  # User object
        # user_obj.age = 18
        # user_obj.save()
    
        # 基于queryset
        # models.User.objects.filter(name='Kevin').update(name='kevin', age=66)
    
    
        # 删除数据
        # 基于queryset
        # res = models.User.objects.filter(name='egon')
        # print(res)
        # models.User.objects.filter(name='egon').delete()
    
        # 基于对象
        # user_ob = models.User.objects.filter(name='owen').first()
        # user_ob.delete()
    
        # 查询数据
        # 1. all(): 查询所有结果   QuerySet[obj, obj]
        # 2. filter(**kwargs): 它包含了所给筛选条件相匹配的对象  QuerySet[obj, obj]
        # res = models.User.objects.filter(name='jason', age=18)  #  filter内可以放多个限制条件但是需要注意的是多个条件之间是and关系
    
        # 3. get(**kwargs)   object
        # 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误
        # res = models.User.objects.get(name='jason')  # 不建议使用
        # print(res)
    
        # 4.exclude(**kwargs): <QuerySet [<User: User object>, <User: User object>, <User: User object>]>
        # 它包含了与所给筛选条件不匹配的对象
        # res = models.User.objects.exclude(name='jason')
        # print(res)
    
        # 5.order_by(*field): 对查询结果排序 QuerySet[obj, obj]
        # res = models.User.objects.order_by('age')  # 默认升序
        # print(res)
    
        # res = models.User.objects.order_by('-age')
        # print(res)  # 倒序
    
        # res = models.User.objects.order_by('name')
        # print(res)
    
        # 6. reverse()  QuerySet[obj, obj] 对查询结果反相排序, 前面要先有排序才能反向
        # res = models.User.objects.order_by('name').reverse()
        # print(res)
    
        # 7. count() 返回数据库中匹配查询
        # res = models.User.objects.count()
        #
        # res = models.User.objects.all().count()
        # print(res)
    
        # 8.first(): 返回第一条记录 obj
        # res = models.User.objects.all().first()
        # print(res)
    
        # res = models.User.objects.all()[0]  # 不支持负数的索引取值
        # print(res)
    
        # 9.last() : 返回最后一条数据 obj
        # 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): 返回一个QuerySet --- -个特殊的QuerySet,
        # 运行后得到的并不是一系列model的实例化对象,而是一个可迭代的字典
        # res = models.User.objects.values('name', 'age')  # QuerySet对象,列表套字典
        # print(res)  # <QuerySet [{'name': 'jason', 'age': 18}, {'name': 'Aegon1', 'age': 38}]>
    
        # 12. values_list() :返回一个QuerySet列表套元组
        # res = models.User.objects.values_list('name', 'age')
        # print(res)
        # <QuerySet [('jason', 18), ('nick', 44), ('kevin', 66),]
    
        # 13.distincat(): 从返回结果中删除重复记录,将去重后的结果返回出来,
    
        # res = models.User.objects.distinct()  # QuerySet [<User: 对象的名字jason>, <User: 对象的名字nick>,]
        # print(res)
        # res = models.User.objects.values('name', 'age')
        # res1 = models.User.objects.values('name', 'age').distinct()  #  【前面去重的对象必须是完全相同的数据才能去重】
    
        # 14. 神奇的双下划线查询 <QuerySet [obj, obj]
        # 查询年纪大于44岁的用户
        # res = models.User.objects.filter(age__gt=34)
        # print(res)
    
        # 查询年纪小于44岁的用户 <QuerySet [<User: 对象的名字jason>,<User: 对象的名字tank>, <User: 对象的名字Aegon1>, <User: 对象的名字jason>]>
        # res = models.User.objects.filter(age__lt=44)
        # print(res)
    
        # 查询年纪大于44岁的用户
        # res = models.User.objects.filter(age__gte=44)
        # print(res)
    
        # 查询名字中包含n的用户
        # res = models.User.objects.filter(name__contains='n')
        #
        # res = models.User.objects.filter(name__icontains='n')  # 忽略大小写
        # print(res)
    
        # 查询名字以j开头的用户
        # res = models.User.objects.filter(name__istartswith='j')
        # print(res)
    
        # 查询注册时间是在2017年的用户
        # res = models.User.objects.filter(register_time__year=2017)  # sqlite对日期格式用create才会被筛选
        # print(res)
    View Code

    补充:

        # 查询年龄是44或者22或者73的用户
        user_obj = models.User.objects.filter(age__in=[22, 28])
        print(user_obj)
    
        # 查询年龄是16到28范围内的
        user_list = models.User.objects.filter(age__range=[16, 28])
        print(user_list)
    View Code
  • 相关阅读:
    bzoj 1588: [HNOI2002]营业额统计 treap
    Codeforces Round #135 (Div. 2) E. Parking Lot 线段数区间合并
    cdoj 851 方老师与素数 bfs
    hdu 5150 Sum Sum Sum 水
    Codeforces Round #376 (Div. 2) F. Video Cards 数学,前缀和
    POJ 1984 Navigation Nightmare 带全并查集
    POJ 1655 Balancing Act 树的重心
    POJ 3140 Contestants Division 树形DP
    HDU 3586 Information Disturbing 树形DP+二分
    HDU 1561 The more, The Better 树形DP
  • 原文地址:https://www.cnblogs.com/qingqinxu/p/11258665.html
Copyright © 2020-2023  润新知