zoukankan      html  css  js  c++  java
  • django第8天(在测试文件中运行django项目|单表操作)

    django第8天

    在测试文件中运行django项目

    1.将项目配置文件数据库该为mysql,修改配置信息
    PORT = '127.0.0.1'
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'dj34',
            'HOST':PORT,
            'USER':'root',
            'PASSWORD':'123',
        }
    }
    2.在项目文件下__init__.py中
    import pymysql
    pymysql.install_as_MySQLdb()
    3.在项目文件夹下创建test.py测试文件
    4.将项目导入环境变量
    import os
    os.environ.setdefault('DJANGO_SETTINGS_MODULE','dj35_1.settings')
    5.直接导入django,并运行
    import django
    django.setup()
    6.导入models模块需要使用的类
    from app0.models import User
    

    简单增删改查

    1.u = User(user="zb",pwd="123",time="2019-03-05")
    u.save()
    2.User.objects.create(user="root",pwd="root",type=1)
    

    ①u1 = User.objects.get(id=1)
    print(u1.user)
    ②User.objects.all()查询所有
    ③User.objects.filter()按条件查询
    u2 = User.objects.filter(id =1,user="zhoubo")[0]
    print(u2)
    get方法查不到或查到的数据大于1都会报错
    

    User.objects.filter(name='Owen').update(name='Owen_best')
    
    users = User.objects.filter(name='Owen_best')
    for user in users:
        user.name = 'Owen'
        user.save()
        
    #update方法的使用对象是对象列表
    #对象不能直接使用update()方法
    #也就是user=User.objects.all().first()
    #user没有update方法
    

    User.objects.filter(id=1,user="zhoubo").delete()
    
    User.objects.filter(id=2).first().delete()
    #对象和对象列表都可以调用delete方法
    

    单表操作函数

    
    1. all():查询所有结果list,支持正向索引取值[i],支持索引切片[m:n]
    #u3 = User.objects.all()[1]
    #print(u3)
    #u4 = User.objects.all()[1:4]
    #print(u4)
    #不支持负向索引,做了优化,每次限制读取21条,
    2. filter(**kwargs):查询满足条件的所有结果list			  
    3. get(**kwargs):查询满足条件的唯一对象obj,查询结果不为obj则抛出异常		  
    4. exclude(**kwargs):查询满足条件的对立面的所有结果list
    #u5 = User.objects.exclude(id=2)
    #print(u5)
    #所有id不等于2的都会显示
    
    
    5. order_by(*field):查询按照指定字段进行排序后的所有结果list,'tag_name'代表正序,'-tag_name'代表降序
    '''
    u6 = User.objects.all().order_by('id')
    print(u6)
    u7 = User.objects.all().order_by('-id')
    print(u7)
    '''
    
    6. reverse():反转排序查询的所有结果list
    '''
    u8 = User.objects.all()
    print(u8)
    u9 = User.objects.all().reverse()
    print(u9)
    <QuerySet [<User: zb>, <User: egon>, <User: ahh>, <User: root>]>
    <QuerySet [<User: zb>, <User: egon>, <User: ahh>, <User: root>]>
    查询结果一样
    
    
    u10 = User.objects.all().order_by('-id')
    print(u10)
    u11 = User.objects.all().order_by('id').reverse()
    print(u11)
    查询结果一样,reverse需要跟在order_by以后使用才有反序效果
    '''
    7. count():统计返回查询结果list的长度
    '''
    u12 = User.objects.all().count()
    print(u12)
    '''
    
    8. first():返回查询结果中的第一个对象obj
    9. last():返回查询结果中的最后一个对象obj
    10. exists():判断查询结果是否存在,值为布尔类型
    
    
    11. values(*field):按照指定字段(们)进行查询,返回存放包含字段(们)的字典的列表list
    '''
    u13 = User.objects.values('user','type')
    print(u13)
    
    <QuerySet [{'user': 'zb', 'type': False}, {'user': 'egon', 'type': False}, {'user': 'ahh', 'type': False}, {'user': 'root', 'type': True}]>
    '''
    
    12. values_list(*field):同values类似,返回存放数据的元组的列表list
    '''
    u14 = User.objects.values_list('user','type')
    print(u14)
    
    <QuerySet [('zb', False), ('egon', False), ('ahh', False), ('root', True)]>
    '''
    
    13. distinct():从查询结果中剔除重复字段(一般和values结合使用)
    #一般表都有主键,主键唯一
    #distinct去重是需要都不相同
    #故和values结合使用,去掉主键字段
    
    

    模糊查询

    # 整型相关
    age__exact=8  # 确切匹配8
    age__in=[8, 10]  # 8或10
    '''
    u15 =   User.objects.filter(age__in=[18,20])
    print(u15)
    '''
    age__gt=8  # 大于8
    '''
    u16 =   User.objects.filter(age__gt=18)
    print(u16)
    '''
    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
    
    # 字符串相关
    name__startswith  # 后方模糊匹配
    name__endswith  # 前方模糊匹配
    name__contains  # 前后方均模糊匹配
    name__regex  # 正则匹配
    name__istartswith  # 不区分大小写后方模糊匹配(i开头就是不区分大小写)
    
    # 时间相关
    birthday__year=2008  # 时间年份模糊匹配
    

    F查询

    # 通过字段名获取可以直接做运算的查询结果
    from django.db.models import F
    F('tag_name')
    
    # 案例一:将id为1的结果年龄增加1
    User.objects.filter(id=1).update(age=F('age')+1)
    # 案例二:查询id是年龄1/4的结果
    user = User.objects.filter(id=F('age')/4)
    '''
    from django.db.models import F
    # User.objects.all().update(age = F('age')+1)
    u17 = User.objects.filter(id = F('age')/3)
    print(u17)
    '''
    

    Q查询

    
    # 完成逻辑运算方式的查询
    from django.db.models import Q
    # 与
    User.objects.filter(Q(id=1) & Q(age=10))
    与的时候可以多个条件用,分开
    # 或
    User.objects.filter(Q(id=1) | Q(id=2))
    # 非
    User.objects.filter(~Q(id=1))
    '''
    from django.db.models import Q
    u19 = User.objects.filter(Q(id=2)|Q(user="zb"))
    print(u19)
    '''
    
  • 相关阅读:
    使用java.util.LinkedList模拟实现内存页面置换算法--LRU算法
    JMS学习(八)-ActiveMQ Consumer 使用 push 还是 pull 获取消息
    判断二叉树是否是平衡二叉树 及二叉树各种操作汇总
    二叉树的前序、中序、后序的非递归遍历实现
    排列与组合的一些定理(二)
    找出数字在已排序数组中出现的次数
    SRM 212 Div II Level Two: WinningRecord,Brute Force
    覆写Activity的finish()方法
    POJ 2046 Gap 搜索- 状态压缩
    WebView利用UserAgent传递SESSIONID
  • 原文地址:https://www.cnblogs.com/robert-zhou/p/10536280.html
Copyright © 2011-2022 走看看