zoukankan      html  css  js  c++  java
  • Djiango orm 单表查询

    一、数据库相关设置:

    # Mysql连接配置  --settings.py
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'db_name',
            'HOST': '127.0.0.1',
            'USER': 'root',
            'PASSWORD': 'root'
        }
    }
    # 配置ORM的loggers日志  --settings.py
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'handlers': {
            'console': {
                'level': 'DEBUG',
                'class': 'logging.StreamHandler',
            },
        },
        'loggers': {
            'django.db.backends': {
                'handlers': ['console'],
                'propagate': True,
                'level': 'DEBUG',
            },
        }
    }
    
    # modles   --modles.py
    class User(models.Model):
        id = models.AutoField(primary_key=True)
        name = models.CharField(max_length=16)
        age = models.IntegerField()
        birthday = models.DateField()

    二、测试文件运行Django项目加载配置

    ------项目测试文件需要加载配置  test.py
    1. 加载项目配置文件
    import os
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "项目名.settings")
    2. 启动Django
    import django
    django.setup()
    3. 使用项目中的各个模块
    from django.db import models
    from appo.models import User

    三、简单的增删改查操作

    #
    user = User.objects.create(name='Owen', age=10, birthday='2008-8-8')
    print(user)
    u1 = User(name="Egon", age=58, birthday="1790-01-01")
    u1.save()
    
    
    User.objects.create(name='Egon', age=59, birthday='1790-01-01')
    
    #
    u_list = User.objects.filter(name="Owen1")
    print(u_list)
    
    try:
        u2 = User.objects.get(name="Egon")
        print(u2)
    except Exception:
        print("Egon 对象不唯一")
    
    #
    User.objects.filter(id=1).update(name="owen")
    
    u3 = User.objects.filter(name="owen")[0]
    print(u3)
    u3.name = "Owen"
    u3.save()
    
    
    #
    User.objects.filter(id=3).delete()
    
    u4 = User.objects.filter(id=1)[0]
    u4.delete()

    四、单表操作

    #1. all():查询所有结果list,支持正向索引取值[i],支持索引切片[m:n]
    # user_list = User.objects.all()
    # u5 = User.objects.all()[0]
    # u_l1 = User.objects.all()[1:3]
    
    #2. filter(**kwargs):查询满足条件的所有结果list        
    # u_l2 = User.objects.exclude(id=1)    
      
    #3. get(**kwargs):查询满足条件的唯一对象obj,查询结果不为obj则抛出异常          
    
    #4. exclude(**kwargs):查询满足条件的对立面的所有结果list
    # u_l2 = User.objects.exclude(id=1)
    
    #5. order_by(*field):查询按照指定字段进行排序后的所有结果list,'tag_name'代表正序,'-tag_name'代表降序
    # u_l3 = User.objects.order_by('-id')
    
    #6. reverse():反转排序查询的所有结果list
    # u_l4 = User.objects.order_by('id').reverse()
    
    #7. count():统计返回查询结果list的长度
    # count = User.objects.all().count()
    
    #8. first():返回查询结果中的第一个对象obj
    
    #9. last():返回查询结果中的最后一个对象obj
    
    #10. exists():判断查询结果是否存在,值为布尔类型
    # res = User.objects.filter(id=10).exists()
    
    #11. values(*field):按照指定字段(们)进行查询,返回存放包含字段(们)的字典的列表list
    # u_l5_dic = User.objects.values('name', 'age')[1:3]
    
    #12. values_list(*field):同values类似,返回存放数据的元组的列表list
    # u_l6_dic = User.objects.values_list('name', 'age')[1:3] 
    
    #13. distinct():从查询结果中剔除重复字段(一般和values结合使用)
    # u_l7 = User.objects.values('name', 'age', 'birthday').distinct()

    五、模糊查询

    user_list = User.objects.filter(id__gte=1)
    
    # 整型相关  返回结果为一个存放了满足查询条件的对象们的列表
    # u_l9 = User.objects.filter(id__in=[1, 4])   结合filter使用
    age__exact=8  # 确切匹配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|1  # 0:is not null | 1:is null  
    
    # 字符串相关  返回结果为一个存放了满足查询条件的对象们的列表
    # u_l12 = User.objects.filter(name__startswith='X')   结合filter使用
    name__startswith  # 后方模糊匹配
    name__endswith  # 前方模糊匹配
    name__contains  # 前后方均模糊匹配
    name__regex  # 正则匹配
    name__istartswith  # 不区分大小写后方模糊匹配(i开头就是不区分大小写)
    
    # 时间相关  返回结果为一个存放了满足查询条件的对象们的列表
    # u_l17 = User.objects.filter(birthday__year=2019)  结合filter使用
    birthday__year=2008  # 时间年份模糊匹配

    六、F查询

      通过字段名获取可以直接做运算的查询结果。

    #--- 将id为1的结果年龄增加1
    #--未使用F的操作方法
    u10 = User.objects.filter(id=1).first()
    print(u10)
    u10.age += 1
    u10.save()
    
    #--使用F查询:
    from django.db.models import F
    # F基于计算 F('字段名')
    # 案例一:将id为1的结果年龄增加1
    User.objects.filter(id=1).update(age=F('age')+1)
    # 案例二:查询id是年龄1/4的结果
    user = User.objects.filter(id=F('age')/4)
    
    #F('age')相当于是执行了了 User.objects.filter(id=1).values('age') 这段代码

    七、Q查询

      完成逻辑运算方式的查询。

    # Q基于关系 Q('字段条件')
    from django.db.models import Q
    # 三种运算符 &(与)  |(或)  ~(非)
    
    u_l20 = User.objects.filter(name__iregex="xiaohou", age=18)  # 默认就是 与关系 &
    print(u_l20)
    
    # 需求:年纪<20 或 姓名包含a
    u_l21 = User.objects.filter(Q(age__lt=20) | Q(name__icontains='a'))
    print(u_l21)
    
    u_l22 = User.objects.filter(~Q(age__lte=20))   # >20
    print(u_l22)
  • 相关阅读:
    sourceinsight安装记录
    ultraedit使用记录
    Java中OutOfMemoryError(内存溢出)的三种情况及解决办法
    applicationContext.xml
    添加lib,支持断点运行,支持自动打包,支持 中文。
    使用Supervisor来管理你的Laravel队列
    laravel使用队列
    debian php无法使用bc函数 bcmath
    gti代码冲突解决
    debian 安装mysql后远程访问不了
  • 原文地址:https://www.cnblogs.com/peng-zhao/p/10478923.html
Copyright © 2011-2022 走看看