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服务器 ---> 路由匹配 ----> 视图函数 ---> 操作模板和数据
图文参考:参考网址
Django框架(三)—— orm增删改查、Django生命周期的更多相关文章
- 基于Django框架 CRM的增删改查
思路: 创建表------从数据库读出数据展示出来------配置路由-----写视图函数------写对应页面 练习点: 数据库建表 ORM 数据库数据读取 数据 ModelForm (form组 ...
- ORM增删改查(django)
单表操作: 一.添加 (1)方式一 from mysite.models import * def add(request): book= Book(name="python" ...
- Spring JdbcTemplate框架搭建及其增删改查使用指南
Spring JdbcTemplate框架搭建及其增删改查使用指南 前言: 本文指在介绍spring框架中的JdbcTemplate类的使用方法,涉及基本的Spring反转控制的使用方法和JDBC的基 ...
- ORM增删改查并发性能测试2
前言 上一篇<ORM增删改查并发性能测试>出现了点小失误,有的输出SQL日志的代码没有禁用,数据库连接字符串可能有问题.统一环境,统一代码后,重新写一篇. 这次重点是并发性能测试,真不是为 ...
- Django框架(三)-- orm增删改查、Django生命周期
一.orm介绍 1.什么是orm ORM即Object Relational Mapping,全称对象关系映射. 2.使用orm的优缺点 优点: 不用写SQL语句 开发效率高 缺点: SQL的效率低 ...
- 饮冰三年-人工智能-Python-24 Django ORM增删改查
一:首先使用默认的sqlite3创建表 1:现在在models.py中添加表模型 from django.db import models # Create your models here. cla ...
- Django 自带的ORM增删改查
通过Django来对数据库进行增删改查 1 首先创建类,在app应用程序里面的model模块里面创建类,写好数据库信息,方便我们待会初始化: 2 创建在django项目里面的settings里面添加 ...
- django ORM 增删改查 模糊查询 字段类型 及参数等
ORM 相关 #sql中的表 #创建表: CREATE TABLE employee( id INT PRIMARY KEY auto_increment , name VARCHAR (), gen ...
- 用户增删改查 django生命周期 数据库操作
一 django生命周期 1 浏览器输入一个请求(get/post)2 响应到django程序中3 执行到url,url通过请求的地址匹配到不同的视图函数4 执行对应的视图函数,此过程可以查询数据库, ...
随机推荐
- Oracle10gr2 开机自启动脚本
目录 目录 软件环境 Oracle服务启动停止重启脚本 软件环境 操作系统 RHEL6.1 软件 Oracle10gr2 Oracle服务启动.停止.重启脚本 su - oracle cd /u01/ ...
- 二级域名解析设置及Apache 子域名配置
域名管理解析项 如: cy.wanggangg.top 为wanggangg.top域名添加解析 主机记录设为 cy 记录值 为服务器ip地址 打开apache配置文件 新增如下:<Virtua ...
- [转]关于Unity中文件读取 - 大世界
原文 http://www.cnblogs.com/ThreeThousandBigWorld/p/3199245.html 存储: 在程序发布后文件的存放有两种,第一种是打包到Uniyt的资源包 ...
- Codeforces 578B "Or" Game (前缀和 + 贪心)
Codeforces Round #320 (Div. 1) [Bayan Thanks-Round] 题目链接:B. "Or" Game You are given \(n\) ...
- git使用记录一:配置账户信息
配置的级别 git config --gloabal 针对当前用户下所有的项目 设置 git config --local 针对当前工作区的项目来进行设置 git config --system 针对 ...
- 实用maven笔记一概念&构建
maven,作为我现在每天都会使用的工具,却发现我还有很多地方了解的迷迷糊糊.老大就曾说过我的一个问题在于,做事情不够精细.大概就是太浮于表面吧.最近突然非常想把maven撸一遍.豆瓣搜了下高分书籍, ...
- 19-vim-分屏命令-01-末行命令扩展
1.末行命令扩展 命令 英文 功能 :e空格. edit 打开内置文件浏览器,浏览当前目录下的文件,不用退出vim,可以在vim中上下浏览目录和文件 :n 文件名 new 新建文件 :w 文件名 wr ...
- redis 入门之string
set 用法 #set key value 设置value为字符串的键值对redis> SET key "value" #对不存在的key设置value OK redis& ...
- Android 中MediaPlayer播放音频
1.播放/res/raw/目录下的音频资源 public class MainActivity extends Activity { MediaPlayer mediaPlayer; int posi ...
- centos6.5大于2T容量硬盘分区、格式化、挂载!
一. 超过2T容量硬盘使用parted创建分区 1.fdisk l(查看需要分区的硬盘盘符如:sda) 2.parted /dev/sda 3.rm 1 4.mklabel gpt(超过2T磁盘格式 ...