zoukankan      html  css  js  c++  java
  • Django ORM单表操作

    models.py

    class UserInfo(models.Model):
        id = models.AutoField(primary_key=True)
        name = models.CharField(max_length=64)
        age = models.IntegerField()
        date = models.DateField(auto_now=True)  # 自动更新时间
    	
        # 方便在admin中管理
        def __str__(self):
            return self.name
    

    views.py

    user_obj = models.UserInfo(name='alex', age=20)
    user_obj.save()
    print(user_obj)
    
    # 添加数据方式2
    obj = models.UserInfo.objects.create(name='abc', age=20)
    print(obj.name)
    print(obj)           
    
    # 添加数据方式3 批量添加
    obj_list = []
    for i in range(100000):
        obj = models.UserInfo(name='a', age=10)
        obj_list.append(obj)
    models.UserInfo.objects.bulk_create(obj_list)
    

    # 删除数据, queryset 和 model 对象都能调用 delete
    models.UserInfo.objects.get(id=3).delete()
    models.UserInfo.objects.filter(name='abc').delete()
    models.UserInfo.objects.all().delete()
    

    # 修改数据 update , model 对象没有 update 方法, 只有 queryset 能调用update
    obj = models.UserInfo.objects.filter(name='dadsa').update(age=24)
    print(obj)
    

    # 查询所有数据 all方法, 返回 queryset 集合
    all_objs = models.UserInfo.objects.all()
    print(all_objs)
    # # < QuerySet[ < UserInfo: UserInfo object(1) >,
    # # < UserInfo: UserInfo object(2) >,
    # # < UserInfo: UserInfo object(3) >, 类似列表
    for obj in all_objs:
        print(obj)
    
    
    # 条件查询1 filter 方法, 返回 queryset 集合, 查询不到内容返回空 queryset, 
    # queryset 类型可以继续调用filter
    obj = models.UserInfo.objects.filter(id=2)
    obj = models.UserInfo.objects.filter(name='alex')
    print(obj)
    
    # 条件查询2 get 方法, 返回 model 对象, 而且 get 方法必须有且只有一个结果, 否则报错
    obj = models.UserInfo.objects.get(id=1)
    print(obj)
    # 报错1:查询结果多了, 报错2: 没有查询到结果
    

    查询详解

    # and
    objs = models.UserInfo.objects.filter(id=2, name='alex')
    print(objs)
    objs = models.UserInfo.objects.filter(**{'name': 'test', 'age': 18})  # get也支持**{}
    print(objs)
    
    # exclude 取反 not, objects控制器和queryset对象都能调用, 返回 queryset
    objs = models.UserInfo.objects.exclude(id=2, name='alex')
    print(objs)
    
    # order_by 排序,可以传多个filed_name,字段前加'-'则为降序, reverse 将查询结果翻转反转
    objs = models.UserInfo.objects.order_by('age', '-id').reverse()
    print(objs)
    
    # count 计数, queryset 对象调用
    num = models.UserInfo.objects.count()
    print(num)
    alex_num = models.UserInfo.objects.filter(name='alex').count()
    print(alex_num)
    
    # last, 返回最后一条数据, queryset 对象调用
    obj = models.UserInfo.objects.all().last()
    print(obj)
    
    # first, 返回第一条数据, queryset 对象调用
    obj = models.UserInfo.objects.filter(name='alex').first()
    print(obj)
    
    # exists 查看是否有数据
    is_data = models.UserInfo.objects.filter(name='dasdsadas').exists()
    print(is_data)
    
    # values/values_list 取值, 返回 queryset, objects 和 queryset 都能调用, 可以指定取哪些字段
    data = models.UserInfo.objects.all().values_list() 	 # 元组
    print(data)	
    data = models.UserInfo.objects.all().values()       	 # 字典
    print(data)
    data = models.UserInfo.objects.all().values('name')      # 字典
    print(data)
    
    # distinct 去重
    objs = models.UserInfo.objects.all().values('name').distinct()
    print(objs)
    

    基于双下滑线的模糊查询

    # gt 大于, gte 大于等于, lt 小于, lte 小于等于
    objs = models.UserInfo.objects.filter(id__gt=3)
    print(objs)
    objs = models.UserInfo.objects.filter(id__gte=3)
    print(objs)
    objs = models.UserInfo.objects.filter(id__lt=3)
    print(objs)
    objs = models.UserInfo.objects.filter(id__lte=3)
    print(objs)
    
    # in 在 ... 里面
    objs = models.UserInfo.objects.filter(id__in=[1,3,5])
    print(objs)
    
    # range 从 ... 到 ...
    objs = models.UserInfo.objects.filter(id__range=(3,5))  # id__gte=3, id__lte=5
    print(objs)
    
    # contains 包含
    objs = models.UserInfo.objects.filter(name__contains='test')
    print(objs)
    
    # icontains 包含, 不区分大小写
    objs = models.UserInfo.objects.filter(name__icontains='test')
    print(objs)
    
    # startswith 以 ... 开头,istartswith 不区分大小写
    objs = models.UserInfo.objects.filter(name__startswith='a')
    print(objs)
    
    # endswith 以 ... 开头,iendswith 不区分大小写
    objs = models.UserInfo.objects.filter(name__endswith='x')
    print(objs)
    
    
    # 查询日期
    objs = models.UserInfo.objects.filter(date='2020-04-17')
    print(objs)
    objs = models.UserInfo.objects.filter(date__day=2,date__month=7)
    print(objs)
    objs = models.UserInfo.objects.filter(date__day__gt=15)
    print(objs)
    
  • 相关阅读:
    T-SQL---多值模糊查询的处理
    SQL Server 并行操作优化,避免并行操作被抑制而影响SQL的执行效率
    SQL Server创建复合索引时,复合索引列顺序对查询的性能影响
    Sql Server 聚集索引扫描 Scan Direction的两种方式------FORWARD 和 BACKWARD
    Sql Server 内存相关计数器以及内存压力诊断
    通过手动创建统计信息优化sql查询性能案例
    对聚集表查询的时候,未显式指定排序列的时候,默认查询结果的顺序一定是按照聚集索引顺序排序的吗
    Buffer cache hit ratio性能计数器真的可以作为SQL Server 内存瓶颈的判断指标吗?
    sqlserver 存储过程中使用临时表到底会不会导致重编译
    权限 位运算
  • 原文地址:https://www.cnblogs.com/xiasir/p/12957749.html
Copyright © 2011-2022 走看看