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

    一.数据库相关设置

    配置ORM的loggers日志:

    # 配置ORM的loggers日志
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'handlers': {
            'console': {
                'level': 'DEBUG',
                'class': 'logging.StreamHandler',
            },
        },
        'loggers': {
            'django.db.backends': {
                'handlers': ['console'],
                'propagate': True,
                'level': 'DEBUG',
            },
        }
    }

    二.单表简单操作

    1.增

    方式一:
    user.objects.create(name='wangke', age=10, birthday='2010-01-01')
    方式二: user
    = User(name='wangke', age=25, birthday='2010-06-01') user.save()

    2.删

    方式一:
    User.objects.filter(name='wangke').delete()
    方式二: user
    = User.object.filter(name='wangke').first() user.delete()

    3.改

    方式一:
    User.objects.filter(name='wangke').update(name='wk')
    
    方式二:
    users = User.objects.filter(name='wangke')
    for user in users:
        user.name = 'wk'
        user.save()

    4.查

    方式一:
    users = User.objects.filter(name='wangke')
    # 操作的结果是一个list
    
    方式二:
    user = User.objects.get(id=1)
    # 只能操作有且只有一条数据的记录,否则会报错

    三.单表操作函数

    1. all():查询所有结果,结果是一个list,只支持正向索引取值[i],支持索引切片[m:n]
    
    2.filter(**kwargs):查询满足条件的所有结果,结果是一个list
    
    3.get(**kwargs):查询满足条件的唯一对象obj,查询结果不为obj则抛出异常
    
    4.exclude(**kwargs):查询满足条件的对立面的所有结果list(相当于条件取反)
    
    5.order_by(*field):查询按照指定字段(field)进行排序后的所有结果
    
    6.reverse():反转排序查询的所有结果list
    
    7.count():统计返回查询结果list的长度
    
    8.first():返回查询结果中的第一个对象obj
    
    9.last():返回查询结果中的最后一个对象obj
    
    10.exists():判断查询结果是否存在,值为布尔值
    
    11.values(*field):按照指定字段们进行查询,返回存放包含字段们的字典的列表list
    
    12.values_list(*field):按照指定字段们进行查询,返回存放数据的元组的列表list
    
    13.distinct():从查询结果中剔除重复字段(一般和values结合使用)

    四.模糊查询

    #都是在filter中进行的操作
    
    # 整型相关
    age__exact = 8  # 确切匹配8,相当于age=8
    age__in = [8,10]  # 8或10
    age__gt = 8  # 大于8
    age__gte = 8  # 大于等于8
    age__lt = 8  # 小于8
    age__lte = 8  # 小于等于8
    age__range = [8,10]  # 8到10之间
    age__isnull = 0  # 值为0:is not null,值为1:is null
    
    # 字符串相关
    name__startswith  # 后方模糊匹配,以什么为开头
    name__endswith  # 前方模糊匹配,以什么结尾
    name__contains  # 前后方均模糊匹配,包含什么
    name__reges  # 正则匹配,使用正则表达式
    name__istartswith  # 不区分大小写后方模糊匹配(i开头就是不区分大小写)
    
    # 时间相关
    birthday__year=2008  # 时间年份模糊匹配

    五.F查询

    # 通过字段名获取可以直接做运算的查询结果
    from django.db.models import F
    
    # 例1:
    # 将id为1的记录的年龄加1
    User.objects.filter(id=1).update(age=F('age')+1)
    
    # 例2:
    # 查询id是年龄1/4的结果
    users = User.objects.filter(id=F('age')/4)

    六.Q查询

    # 完成逻辑运算方式的查询:与,或,非
    from django.db.models import Q
    
    #1.与
    User.objects.filter(Q(id=1) & Q(age=10))
    # 默认就是与,例:User.objects.filter(id=1,age=10)
    
    #2.或
    User.objects.filter(Q(id=1) | Q(id=10))
    
    #3.非
    User.objects.filter(~Q(id=1))
  • 相关阅读:
    微信 JS SDK 的 chooseImage 接口在部分安卓机上容易造成页面刷新
    规约模式Specification Pattern
    ASP.NET Core 1.0基础之日志
    C# 7 新特性-2
    C# 7 新特性-1
    ASP.NET Core 1.0基础之诊断
    ASP.NET Core 1.0基础之依赖注入
    ASP.NET Core 1.0 基础之配置
    ASP.NET Core 1.0基础之静态文件处理
    FreeSql生产环境自动升级数据库解决方案
  • 原文地址:https://www.cnblogs.com/wangke0917/p/10478863.html
Copyright © 2011-2022 走看看