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服务器 ---> 路由匹配 ----> 视图函数 ---> 操作模板和数据

图文参考:参考网址

Django框架(三)—— orm增删改查、Django生命周期的更多相关文章

  1. 基于Django框架 CRM的增删改查

    思路: 创建表------从数据库读出数据展示出来------配置路由-----写视图函数------写对应页面 练习点: 数据库建表 ORM 数据库数据读取 数据 ModelForm  (form组 ...

  2. ORM增删改查(django)

    单表操作: 一.添加 (1)方式一 from  mysite.models  import * def  add(request): book= Book(name="python" ...

  3. Spring JdbcTemplate框架搭建及其增删改查使用指南

    Spring JdbcTemplate框架搭建及其增删改查使用指南 前言: 本文指在介绍spring框架中的JdbcTemplate类的使用方法,涉及基本的Spring反转控制的使用方法和JDBC的基 ...

  4. ORM增删改查并发性能测试2

    前言 上一篇<ORM增删改查并发性能测试>出现了点小失误,有的输出SQL日志的代码没有禁用,数据库连接字符串可能有问题.统一环境,统一代码后,重新写一篇. 这次重点是并发性能测试,真不是为 ...

  5. Django框架(三)-- orm增删改查、Django生命周期

    一.orm介绍 1.什么是orm ORM即Object Relational Mapping,全称对象关系映射. 2.使用orm的优缺点 优点: 不用写SQL语句 开发效率高 缺点: SQL的效率低 ...

  6. 饮冰三年-人工智能-Python-24 Django ORM增删改查

    一:首先使用默认的sqlite3创建表 1:现在在models.py中添加表模型 from django.db import models # Create your models here. cla ...

  7. Django 自带的ORM增删改查

     通过Django来对数据库进行增删改查 1 首先创建类,在app应用程序里面的model模块里面创建类,写好数据库信息,方便我们待会初始化: 2 创建在django项目里面的settings里面添加 ...

  8. django ORM 增删改查 模糊查询 字段类型 及参数等

    ORM 相关 #sql中的表 #创建表: CREATE TABLE employee( id INT PRIMARY KEY auto_increment , name VARCHAR (), gen ...

  9. 用户增删改查 django生命周期 数据库操作

    一 django生命周期 1 浏览器输入一个请求(get/post)2 响应到django程序中3 执行到url,url通过请求的地址匹配到不同的视图函数4 执行对应的视图函数,此过程可以查询数据库, ...

随机推荐

  1. cs224d 作业 problem set2 (三) 用RNNLM模型实现Language Model,来预测下一个单词的出现

      今天将的还是cs224d 的problem set2 的第三部分习题, 原来国外大学的系统难度真的如此之大,相比之下还是默默地再天朝继续搬砖吧 下面讲述一下RNN语言建模的数学公式: 给出一串连续 ...

  2. QMUI android 框架 git下载项目运行报错解决 input String“”

    1.编译源码,input String“” 解决办法: 打开qmuidemo里面的gradle文件,注释掉顶部的 //def cmd = 'git rev-list HEAD --count'//de ...

  3. 字符串模式匹配算法系列(三):Trie树及AC改进算法

    Trie树的python实现(leetcode 208) #!/usr/bin/env python #-*- coding: utf-8 -*- import sys import pdb relo ...

  4. 8.Jmeter 快速入门教程 -- 如何使测试脚本更强大

    添加基本的elements例如Sampler 或者一些监听器,就可以完成基本的测试.但有时需要更复杂的测试场景,所以还有更多其他的元素.清看下表,了解各种单元组的用途.  可添加的单元组  用途 Sa ...

  5. 07、python的基础-->数据类型、集合、深浅copy

    一.数据类型 1.列表 lis = [11, 22, 33, 44, 55] for i in range(len(lis)): print(i) # i = 0 i = 1 i = 2 del li ...

  6. [已解决]报错: Python Scrapy - service_identity(opentype) not working and cannot install

    解决:更新安装service_identity pip3 install service_identity --force --upgrade

  7. MySQL数据库安装与启动(Linux)

    1.用yum安装 用root权限打开命令行界面,执行以下yum指令: yum安装MySQL yum install mysql mysql-server mysql-devel -y 在最终提示Com ...

  8. OK。第一个shell script 脚本

    很简单吧.也很容易理解.读取两个字符放到变量firstname和lastname中,然后输出 编辑日期格式 上面是编辑日期格式.下面的例题是按照日期格式来分类创建文件

  9. Tmux 简单配置使用

    Tmux Prefix (prefix) Tmux 使用 Prefix 以将自身的快捷键与其它应用区分,运行 Tmux 快捷键时首先按下这个 Prefix (默认是 Ctrl-b 组合键),松手后紧接 ...

  10. Largest Submatrix 3

    Largest Submatrix 3 给出一个\(n\times m\)的网格图,第i行第j列上的格子有数字\(a[i][j]\),显然,你可以从中找到一个子矩阵,保证子矩阵中的数字互不相同,求子矩 ...