• django orm


    django orm

    """
    ORM. 对象关系映射
    作用:能够让一个不用sql语句的小白也能够通过python 面向对象的代码简单快捷的操作数据库
    不足之处:封装程度太高 有时候sql语句的效率偏低 需要你自己写SQL语句
    
    类                                            表
    
    对象                                    记录
        
    对象属性                            记录某个字段对应的值
    
    
    应用下面的models.py文件
    """
    
    # 1 先去models.py中书写一个类
        class User(models.Model):
        # id int primary_key auto_increment
        id = models.AutoField(primary_key=True)
        # username varchar(32)
        username = models.CharField(max_length=32)
        # password int
        password = models.IntegerField()
    
    *************************# 2 数据库迁移命令*************************
    python3 manage.py makemigrations 将操作记录记录到小本本上(migrations文件夹)
    
    python3 manage.py migrate  将操作真正的同步到数据库中
    # 只要你修改了models.py中跟数据库相关的代码 就必须重新执行上述的两条命令
    ******************************************************************
    
    class User(models.Model):
        # id int primary_key auto_increment
        id = models.AutoField(primary_key=True,verbose_name='主键')
        # username varchar(32)
        username = models.CharField(max_length=32,verbose_name='用户名')
        """
        CharField必须要指定max_length参数 不指定会直接报错
        verbose_name该参数是所有字段都有的 就是用来对字段的解释
        """
        # password int
        password = models.IntegerField(verbose_name='密码')
    
    
    class Author(models.Model):
        # 由于一张表中必须要有一个主键字段 并且一般情况下都叫id字段
        # 所以orm当你不定义主键字段的时候 orm会自动帮你创建一个名为id主键字段
        # 也就意味着 后续我们在创建模型表的时候如果主键字段名没有额外的叫法 那么主键字段可以省略不写
        # username varchar(32)
        username = models.CharField(max_length=32)
        # password int
        password = models.IntegerField()

    字段的增删改查

    # 字段的增加
        1.可以在终端内直接给出默认值
      2.该字段可以为空
        info = models.CharField(max_length=32,verbose_name='个人简介',null=True)
      3.直接给字段设置默认值
        hobby = models.CharField(max_length=32,verbose_name='兴趣爱好',default='study')
     
    # 字段的修改
        直接修改代码然后执行数据库迁移的两条命令即可!
    
    # 字段的删
        直接注释对应的字段然后执行数据库迁移的两条命令即可!
      执行完毕之后字段对应的数据也都没有了
      
    """
    在操作models.py的时候一定要细心
        千万不要注释一些字段
        执行迁移命令之前最好先检查一下自己写的代码
    """
    
    # 个人建议:当你离开你的计算机之后一定要锁屏

    数据的增删改查

    #
    res = models.User.objects.filter(username=username)
    """
    返回值你先看成是列表套数据对象的格式
    它也支持索引取值 切片操作 但是不支持负数索引
    它也不推荐你使用索引的方式取值
    user_obj = models.User.objects.filter(username=username).first()
    """
    filter括号内可以携带多个参数 参数与参数之间默认是and关系
    你可以把filter联想成where记忆
    
    
    
    #
    from app01 import models
    res = models.User.objects.create(username=username,password=password)
    # 返回值就是当前被创建的对象本身
    
    # 第二种增加
    user_obj = models.User(username=username,password=password)
    user_obj.save()  # 保存数据

    # 先讲数据库中的数据全部展示到前端 然后给每一个数据两个按钮 一个编辑一个删除
    
    
    
    
    # 查看
    
    
    def userlist(request):
    
    
        # 查询出用户表里面所有的数据
    
    
        # 方式1
    
    
        # data = models.User.objects.filter()
    
    
        # print(data)
    
    
        # 方式2
    
    
        user_queryset = models.User.objects.all()
    
    
        # return render(request,'userlist.html',{'user_queryset':user_queryset})
    
    
        return render(request,'userlist.html',locals())
    
    
    
    
    # 编辑功能
    
    
        # 点击编辑按钮朝后端发送编辑数据的请求
    
    
      """
    
    
      如何告诉后端用户想要编辑哪条数据?
    
    
        将编辑按钮所在的那一行数据的主键值发送给后端
    
    
        利用url问号后面携带参数的方式
    
    
    
    
    
    
        {% for user_obj in user_queryset %}
    
    
                            <tr>
    
    
                                <td>{{ user_obj.id }}</td>
    
    
                                <td>{{ user_obj.username }}</td>
    
    
                                <td>{{ user_obj.password }}</td>
    
    
                                <td>
    
    
                                    <a href="/edit_user/?user_id={{ user_obj.id }}" class="btn btn-primary btn-xs">编辑</a>
    
    
                                    <a href="" class="btn btn-danger btn-xs">删除</a>
    
    
                                </td>
    
    
                            </tr>
    
    
                        {% endfor %}
    
    
      """
    
    
      # 后端查询出用户想要编辑的数据对象 展示到前端页面供用户查看和编辑
    
    
      def edit_user(request):
    
    
        # 获取url问号后面的参数
    
    
        edit_id = request.GET.get('user_id')
    
    
        # 查询当前用户想要编辑的数据对象
    
    
        edit_obj = models.User.objects.filter(id=edit_id).first()
    
    
    
    
        if request.method == "POST":
    
    
            username = request.POST.get('username')
    
    
            password = request.POST.get('password')
    
    
            # 去数据库中修改对应的数据内容
    
    
            # 修改数据方式1
    
    
            # models.User.objects.filter(id=edit_id).update(username=username,password=password)
    
    
            """
    
    
                将filter查询出来的列表中所有的对象全部更新            批量更新操作
    
    
                只修改被修改的字段
    
    
            """
    
    
    
    
            # 修改数据方式2
    
    
            edit_obj.username = username
    
    
            edit_obj.password= password
    
    
            edit_obj.save()
    
    
            """
    
    
                上述方法当字段特别多的时候效率会非常的低
    
    
                从头到尾将数据的所有字段全部更新一边 无论该字段是否被修改
    
    
            """
    
    
            
    
    
            # 跳转到数据的展示页面
    
    
            return redirect('/userlist/')
    
    
    
    
    
    
    
    
        # 将数据对象展示到页面上
    
    
        return render(request,'edit_user.html',locals())
    
    
    
    
    # 删除功能
    
    
        """
    
    
        跟编辑功能逻辑类似
    
    
        def delete_user(request):
    
    
        # 获取用户想要删除的数据id值
    
    
        delete_id = request.GET.get('user_id')
    
    
        # 直接去数据库中找到对应的数据删除即可
    
    
        models.User.objects.filter(id=delete_id).delete()
    
    
        """
    
    
            批量删除
    
    
        """
    
    
        # 跳转到展示页面
    
    
    
    
        return redirect('/userlist/')
    
    
    
    
    
    
        """
    
    
    # 真正的删除功能应该需要二次确认 我们这里先不做后面会讲
    
    
    # 删除数据内部其实并不是真正的删除 我们会给数据添加一个标识字段用来表示当前数据是否被删除了,如果数据被删了仅仅只是讲字段修改一个状态
    
    
        username password   is_delete
    
    
      jason         123             0
    
    
      egon          123             1
     
  • 相关阅读:
    基于golang+openssh 服务实现一个简单的git over ssh 服务
    dremio 查询sql 执行参考流程
    几款开源git server ssh 协议forced command 参考格式
    dremio job 处理流程参考
    基于golang cgi 实现一个简单的git http server
    dremio cloud 分层datasets 实践
    flightsql apache arrow sql 扩展
    Docker 三剑客之 Docker Swarm
    查看docker服务状态
    SQL去重的三种方法汇总​
  • 原文地址:https://www.cnblogs.com/mayrain/p/13054405.html
Copyright © 2020-2023  润新知