zoukankan      html  css  js  c++  java
  • Django框架(三)—— orm增删改查、Django生命周期

    orm增删改查、Django生命周期

    一、orm介绍

    1、什么是orm

    ORM即Object Relational Mapping,全称对象关系映射。

    2、使用orm的优缺点

    优点:
    • 不用写SQL语句
    • 开发效率高
    缺点:
    • SQL的效率低

    3、使用orm

    • 如果连接的是pycharm默认的Sqlite,不用改动,使用默认配置即可

    • 如果连接mysql,需要在配置文件中的setting中进行配置:

      将DATABASES={} 更新为

      DATABASES = {
          'default': {
              'ENGINE': 'django.db.backends.mysql',
              'HOST': '127.0.0.1',
              'PORT': 3306,
              'USER': 'root',
              'PASSWORD': '123123',
              'NAME': 'test_database',
          }
      }

      同时还要在__init__.py文件中进行初始化设置:

      import pymysql
      pymysql.install_as_MySQLdb()

    配置完以后,要进行数据迁移(在pycharm的终端Terminal中运行指令),否则数据更新不能同步到mysql数据库中

    python manage.py makemigrations    ----记录数据库的变化,在migrations文件中可以看到记录
    python manage.py migrate           ----将变化同步到数据库中

    或者

    菜单 tools--->Run manage.py Task,即可进入manage.py,直接输入以下指令即可

    makemigrations    ----记录数据库的变化,在migrations文件中可以看到记录
    migrate           ----将变化同步到数据库中

    4、orm的使用限制

    ​ 只能创建数据表和字段不能创建数据库(必须手动创建数据库)

    ​ 创建一个类就表示创建了一个数据表,类中的属性表示数据表中的字段

    创建表和字段在modules.py中

    类 --->  数据表
    属性 --->  字段

    5、orm创建表和字段

    # 类必须继承models.Model类,否则只表示一个普通的类
    # AutoField 自动增长的int类型
    # primary_key=True 该字段是主键
    # CharField(max_length=32) 表示 varchar(32)
    class User(models.Model):
        id = models.AutoField(primary_key=True)
        name = models.CharField(max_length=32)
        password = models.CharField(max_length=32)
        address = models.CharField(max_length=32)

    二、orm增删改字段

    在增删改以后都要进行数据迁移

    1、orm增加字段

    直接在创建表的类中添加一个属性,即增加一个字段,然后执行数据迁移

    添加的字段必须有默认值,两种方式

    • 在添加的参数中添加默认值
    phone=models.CharField(max_length=64,default='120')
    • 在数据迁移的时候,设置默认值

    2、orm删除字段

    将类中的属性注释,即表示删除字段,执行数据迁移

    3、orm修改字段

    直接修改类中的属性,执行数据库迁移命令

    4、案例总结

    • user表的增删改
    (1)单表查询所有用户

    得到的是queryset对象(类似于列表),列表中一个个对象[user1, user2, user3]

    res = models.User.objects.all()
    (2)render

    返回页面,将queryset对象(类似于列表)res返回到userlist.html页面的user_list

    render(request, 'userlist.html', {'user_list': res})
    (3)循环模板
    {% for user in user_list %}
        # 要循环的内容,下面的插值表达式表示获取每一个user的name的数据    
        {{user.name}}
    {% endfor%}
    (4)get请求携带参数

    通过get发送请求,会将数据暴露出来,例如id就会显示http://127.0.0.1:8000/deleteuser/?id=1
    前台get方式提交的数据,后台从request.GET字典里取值:

    id = request.GET.get('id')   # 推荐使用,即使没有接收到数据也会有默认值,不会抛出异常
    或者
    id = request.GET['id']  # 该方式要是没有接收到数据会出现异常
    (5)post请求提交数据

    前台post方式提交的数据,后台从request.POST字典里取值:

    name = request.POST.get('name')
    (6)删除数据记录

    先过滤找到指定数据,然后调用方法delete()删除该数据

    # 返回值是影响的行数
    res = models.User.objects.filter(id = id).delete()
    (7)添加数据记录

    两种方式:

    • 方式一:
    user=models.User.objects.create(name=name,password=pwd,address=addr)
    • 方式二:
    user = models.User(name=name, password=password, address=addr)
    user.save()
    (8)修改数据记录

    先过滤找到要修改的数据记录,然后调用update()方法修改数据

    models.User.objects.filter(id = id).update(name=name,password=password,age=age)
    (9)查询单条数据

    由于过滤到的所有数据可能是多条数据,所以要用first()来取出第一条

    models.User.objects.filter(id=id).first()

    三、Django生命周期

    浏览器 ---> web服务器 ---> 路由匹配 ----> 视图函数 ---> 操作模板和数据

    图文参考:参考网址

    博客内容仅供参考,部分参考他人优秀博文,仅供学习使用
  • 相关阅读:
    Android 音频播放——AudioTrack直接播PCM、MediaPlayer播媒体文件可以是audio
    Android 音频采集——MediaRecord(编码后录影文件) 、AudioRecord(PCM原始数据)
    .Net 下利用ICSharpCode.SharpZipLib.dll实现文件压缩、解压缩
    调用 LoadLibraryEx 失败,在 ISAPI 筛选器 "C:Program Files (x86)HeliconISAP
    SQL1117N 因为处于 ROLL-FORWARD PENDING
    asp.net配置IIS过程错误解决
    IIS发布一些问题
    为具有端口 "50000" 的服务名称 "db2c_DB2" 而更新系统上的服务文件时出错
    IIS Server Application Unavailable
    db2堆中没有足够的存储器可用来处理语句的解决
  • 原文地址:https://www.cnblogs.com/zhuzhiwei-2019/p/10779076.html
Copyright © 2011-2022 走看看