zoukankan      html  css  js  c++  java
  • 表的增删改查

    一、字段的增删改查

    1.改

    因为这里动了models中跟数据库相关的代码,所以必须重新执行“python3 manage.py makemigrations”,“python3 manage.py migrate”这两条命令 ,才能同步到数据库

    2.增

    当一张表已经创建出来之后 后续还想添加字段,可以有两种方式
                    1.给新增的字段设置默认值
                        addr = models.CharField(max_length=32,default='China')  # default该字段默认值
    
                    2.给新增的字段设置成可以为空
                            age = models.IntegerField(null=True)  # 该字段允许为空

    3.删(慎用)

    删除字段 直接在models.py中注释该字段 然后重新执行两条命令即可
                注意:执行完之后 表中该字段所对应的所有的数据全部删除
                并且一般情况下 基本是不会用到真正意义上的删除

    二、数据的增删改查

    1.查

    models.User.objects.filter(username=username,password=password)
            """
            filter查询出来的结果是一个"列表 列表内放的才是一个个的数据对象本身"
            当查询条件不存在的时候 不会报错 只会返回一个空列表
            filter括号内 支持写多个参数  并且参数与参数之间是and的关系
            """
            # print(res.query)  # 只有querySet对象才可以直接点query查看年内部对应的sql语句
            # 1.filter拿到的结果就是一个querySet对象(你现在只需要知道filter拿到的结果就能够点query查看sql语句)
            """
            SELECT `app01_user`.`id`, `app01_user`.`username`, `app01_user`.`password` 
            FROM `app01_user` 
            WHERE (`app01_user`.`username` = jason AND `app01_user`.`password` = 123)
            
            """
            """
            querySet对象 你可以吧它当做列表操作 取值也可以通过索引取(querySet只支持正数索引 不支持负数) 还支持切片操作(切出来的结果还是一个querySet对象)
            但是不推荐你这么做
            """
            user_obj = models.User.objects.filter(username=username).first()  # 拿列表中第一个数据对象
            """
            不推荐你使用索引取值 原因在于一旦没有任何数据 再索引取值会报错
            但是如果用first虽然内部也是按照索引取值  但是没有数据 也不会报错 返回的是None
            """
            if user_obj:
                if user_obj.password == password:
                    return redirect('http://www.xiaohuar.com')
    
            return HttpResponse('用户不存在 ')
        print(request.GET)  # 如果没有get请求携带的数据  就是一个空字典
        print(request.GET.get('username'))
        print(request.GET.getlist('hobby'))
        return render(request,'login.html')
    方法:       
    .获取模型表中所有的数据
    models.User.objects.all() # 结果也是querySet对象 只要是queryset对象 就可以点query查看内部sql语句
    2.筛选相应的数据
    1.直接获取对象的
    models.User.objects.get(**kwargs) # 条件不存在 立刻报错 不推荐使用
    2.获取querySet对象的(
    1.querySet对象你可以把它看成是一个列表 里面放的是一个个的数据对象
    2.querySet对象支持索引取值和切片操作 但是不支持负数 也不推荐你使用
    建议你使用封装好的方法
    )
    queryset = models.User.objects.filter(**kwargs) # 括号内多个参数是and的关系
    user_obj = querySet.first() # 没有也不会报错 直接返回None

    2.增

    def reg(request):
        if request.method == 'POST':
            username = request.POST.get("username")
            password = request.POST.get('password')
            # orm插入数据
            # 1.create()
            # res = models.User.objects.create(username=username,password=password)  # insert into user(username,password) values(username,password)
            # """
            # create方法能够新增数据 并且有一个返回值
            # 返回值就是新增的数据对象本身
            # """
            # print(res)
            # print(res.username)
            # print(res.password)
            # 2.利用对象
            user_obj = models.User(username=username,password=password)
            user_obj.save()
        return render(request,'reg.html')
           第一种方法: models.User.objects.create(username=username,password=password)
           第二种方法: user_obj = models.User(username=username,password=password)
            user_obj.save()

    3.删

    def user_list(request):
        # 将user表中的数据全部查出
        data = models.User.objects.all()  # select * from user
        """
        拿到的也是一个querySet对象 
        """
        print(data.query)
        return render(request,'userlist.html',{'user_list':data})
    
    def del_user(request):
        # 根据用户想要删除的数据的id值 取数据库中删除数据
        # 获取到id值
        delete_id = request.GET.get('id')
        # 拿着id去数据库中删除
        models.User.objects.filter(id=delete_id).delete()  # delete from user where id = delete_id;
        return redirect('/userlist/')
    1.利用queryset对象delete批量删除
                            models.User.objects.filter(age = 18).delete()  # 会将queryset中所有的数据全部删除

    4.改

    def update_user(request):
        # 编辑 是基于已经存在了的数据 进行一个修改
        # 逻辑:获取用户想要修改的数据的主键值  然后去数据库修改数据
        edit_id = request.GET.get('id')
        # 给用户将数据查出来 展示到页面上 让用户自己修改
        edit_obj = models.User.objects.filter(id=edit_id).first()
        # 将编辑对象传递给前端页面
    
        if request.method == 'POST':
            # 不要关系思维 post请求中也是获取get请求携带的参数
            username = request.POST.get('username')
            password = request.POST.get('password')
            # 更新数据
            # 方式1:
            # models.User.objects.filter(id=edit_id).update(username=username,password=password)
            # update user set username = username,password = password where id = edit_id
            """
            filter拿到是一个列表   filter操作其实都是批量操作
            如果filter结果列表中有多个数据 那么会一次性全部修改 
            类似于for循环一个个修改
            
            """
    1.利用queryset对象的update批量修改的方法
                            models.User.objects.filter(age = 18).update(**kwargs)  # 会将queryset中所有的数据全部修改
                        
    2.利用对象修改属性的方法
                            user_obj = models.User.objects.filter(**kwargs).first()
                            user_obj.username = 'jason'
                            user_obj.save()  # 该方法 会将数据库中所有的字段全部重写修改一遍 效率极低 不推荐使用
  • 相关阅读:
    Linux文档目录结构
    Git
    Scrapy爬虫框架(架构图与解析)
    爬虫(总目录)
    Django模型(Meta Optins)
    Django模型(字段关系)
    Django模型(模型类)
    Django模型(索引)
    Django模型(字段选项)
    Django模型(字段类型)
  • 原文地址:https://www.cnblogs.com/xiongying4/p/11531009.html
Copyright © 2011-2022 走看看