Django基础篇(二)与mysql配合使用
需求:模拟实现学员管理系统。<*_* 从基础做起>
表结构如下: 班级/学生/老师
班级表: id title
1 xx
2 xx
学生表: id name 班级ID(foreign key)
1 xxx 1
2 xxx 2
老师表: id name
1 xxxx
2 xxx
老师班级关系表(多对多):
id tid(教师id) cid (班级id)
1 1 1
1 2 2
......
1.单表操作
- 增
- 删
- 改
- 查
import pymysql
# 连接mysql
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='root123456', db='studentManager',
charset='utf8')
# 此处的cursor 一定要写成字典类型. 否则查询结构 返回元祖类型
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
cursor.execute('select id,title from class')
# 返回多个值
class_list = cursor.fetchall()
cursor.close()
conn.close()
return render(request, 'classes.html', {'class_list': class_list})
连接mysql
踩坑1:携带查询结果无法在页面上通过循环渲染?
# 通过情况下连接惯性写的是
错误写法:cursor = conn.cursor () # 此处这样写cursor查询结束会将结果封装成元祖类型... 之后通过for循环取值就稳凉...
正确写法:cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 此处这样写cursor查询结果会封装成字典类型. 取值so esay...
--------------------------------------------------------------------------------------------
踩坑2:return render(request, 'classes.html', {'class_list': class_list}) 为撒第一个参数request飘红 ?
麻溜溜去检查函数的形式参数中第一个参数是否写了request...
整体单表操作的思路如下:通过form表单进行数据获取和传递到后台。注意事项有:
- 增、删、改操作结束后重定向到展示班级信息页;
- 携带id传递到后台,一波查询获取数据,返回到修改页.
# 显示班级列表
# 参数列表上有一个request,切记,切记
def classes(request):
# 连接mysql
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='root123456', db='studentManager',
charset='utf8')
# 此处的cursor 一定要写成字典类型. 否则查询结构 返回元祖类型
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
cursor.execute('select id,title from class')
# 返回多个值
class_list = cursor.fetchall()
cursor.close()
conn.close()
return render(request, 'classes.html', {'class_list': class_list})
展示班级信息--->查
def add_class(request):
if request.method == 'GET':
return render(request, 'add_class.html')
else:
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='root123456', db='studentManager',
charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
v = request.POST.get('title')
cursor.execute('insert into class(title) values (%s)', [v, ])
conn.commit()
cursor.close()
conn.close()
return redirect('/classes/')
添加班级信息--->增
def edit_class(request):
# 点击编辑按钮,根据Id获取到class信息 传入到下一个页面中
if request.method == 'GET':
id = request.GET.get('nid')
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='root123456', db='studentManager',
charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
cursor.execute('select id,title from class where id = %s', [id, ])
result = cursor.fetchone()
cursor.close()
conn.close()
return render(request, 'edit_class.html', {'result': result})
else:
id = request.POST.get('id')
title = request.POST.get('title')
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='root123456', db='studentManager',
charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
v = request.POST.get('title')
cursor.execute('update class set title =%s where id=%s', [title, id])
conn.commit()
cursor.close()
conn.close()
return redirect('/classes/')
编辑班级信息页--->查&改
def del_class(request):
id = request.GET.get('nid')
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='root123456', db='studentManager',
charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
cursor.execute('delete from class where id = %s', [id, ])
conn.commit()
cursor.close()
conn.close()
return redirect('/classes/')
删除班级信息---->删
注:对于单表操作表单信息量不是很大的情况下,使用Ajax操作会更加丝滑...
Django基础篇(二)与mysql配合使用的更多相关文章
- Django 基础篇(二)视图与模板
视图 在django中,视图对WEB请求进行回应 视图接收reqeust对象作为第一个参数,包含了请求的信息 视图就是一个Python函数,被定义在views.py中 #coding:utf- fro ...
- 01: Django基础篇
目录:Django其他篇 01:Django基础篇 02:Django进阶篇 03:Django数据库操作--->Model 04: Form 验证用户数据 & 生成html 05:Mo ...
- php基础篇-二维数组排序 array_multisort
原文:php基础篇-二维数组排序 array_multisort 对2维数组或者多维数组排序是常见的问题,在php中我们有个专门的多维数组排序函数,下面简单介绍下: array_multisort(a ...
- Django基础(二)
Django基础(二) http://www.cnblogs.com/wupeiqi/articles/4508271.html
- python的django基础篇
一.Django基础 Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站! Django的特点: 强大的数据库功能:拥有强大的数据库操作接口(QueryS ...
- python3之Django基础篇
一.Django基础 Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站! Django的特点: 强大的数据库功能:拥有强大的数据库操作接口(QueryS ...
- 2.高并发教程-基础篇-之nginx+mysql实现负载均衡和读写分离
技巧提示:mysql读写分离搭建好之后,配合nginx的负载均衡,可以高效的mysql的集群性能,同时免去麻烦的query分流.比如,sever1收到的请求就专门链接slave1从mysql读取数据, ...
- django 基础篇
jdango 简介: 一个可以使Web开发工作愉快并且高效的Web开发框架. 使用Django,使你能够以 小的代价构建和维护高质量的Web应用. Python的WEB框架有Django.Tornad ...
- JavaScript笔记基础篇(二)
基础篇主要是总结一些工作中遇到的技术问题是如何解决的,应为本人属于刚入行阶段技术并非大神如果笔记中有哪些错误,或者自己的一些想法希望大家多多交流互相学习. 1.ToFixed()函数 今天在做Birt ...
- Qt入门之基础篇 ( 二 ) :Qt项目建立、编译、运行和发布过程解析
转载请注明出处:CN_Simo. 题解: 本篇内容主讲Qt应用从创建到发布的整个过程,旨在帮助读者能够快速走进Qt的世界. 本来计划是讲解Qt源码静态编译,如此的话读者可能并不能清楚地知道为何要静态编 ...
随机推荐
- pug学习
pug学习 jade(pug)由于商标版权问题,jade已经改名为Pug.Pug 是一个高性能的模板引擎,它是用 JavaScript 实现的,并且可以供 Node 使用,当然还支持其他语言. 文件后 ...
- R语言利用ROCR评测模型的预测能力
R语言利用ROCR评测模型的预测能力 说明 受试者工作特征曲线(ROC),这是一种常用的二元分类系统性能展示图形,在曲线上分别标注了不同切点的真正率与假正率.我们通常会基于ROC曲线计算处于曲线下方的 ...
- nginx配置相关问题
1. nginx配置ssl相关问题 1.1 报错nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in ...
- PAT甲级【2019年9月考题】——A1160 Forever【20】
7-1 Forever (20 分) "Forever number" is a positive integer A with K digits, satisfying the ...
- html5 新增元素以及css3新特性
HTML5 1.HTML5 新元素 HTML5提供了新的元素来创建更好的页面结构: 标签 描述 <article> 定义页面独立的内容区域. <aside> 定义页面的侧边栏内 ...
- 整理eclipse,升级jdk环境小记录
这2天在整理项目: 需要把eclipse 32位,jdk1.6 32位的更改为eclipse 64位,jdk1.8 64位版本的,于是我就在一台window7的电脑上直接操作,遇到了一下几点问题,记录 ...
- Qt 程序在 Windows 下的发布
本文讨论在 Windows 平台下编译成功的 Qt 程序,如何在未配置 Qt 开发环境的 Windows 平台下独立运行的方法. 经过验证发现,在 Ubuntu 平台下编译成功的程序可在未安装 Qt ...
- UVALive 4992 Jungle Outpost(半平面交判存)
Jungle Outpost Time limit: 15.000 seconds Description There is a military base lost deep in the jung ...
- 使用 QSqlTableModel 模型向数据库中插入数据时,为什么使用 rowCount 函数只能返回 256 最大值?
默认返回缓冲区里面的数据,如果你向要获取更多值,请在前面加入以下语句即可. while(model.canFetchMore()){ model.fetchMore(); } 该语句会获取更多的记录.
- vue证明题四,使用组件
vue的开发方式,基本上是以组件为主的,至于为啥,我也不好去论述,网上看别人的 所谓渐进式开发,也是源自于单页面应用这一说,而注册一个域名以后,指定了首页,爬虫爬取链接都是从首页开始的 如果一个网址, ...