mysql在python中的运用与mysql练习,pip下载源
MySQL的阶段应用
- python如何操作MySQL
- python代码操作MySQL
- MySQL的练习
python如何操作MySQL
实现python代码操作MySQL需要借助第三方模块
该模块:也是由他人所写传到网上的
所以使用第三方软件需要网上下载
下载pymysql
环境变量配置
1.首先要配置pip3.exe文件的环境变量
2.在path路径中添加pip3.exe所在路径
方法1:
打开cmd窗口,输入
pip3 insatll pymysql # 此命令默认在外网下载,网速会比较慢
方法2:
在pycharm终端,输入
pip3 insatll pymysql
方法3:
在pycharm用快捷键
1.点击file>>>setting
2.Project:...... >>> Python interpreter >>> 加号
3.在查找框输入pyMySQL,在菜单中选择需要的模块,点击Install Package既可。
运程仓库
pip3下载模块时默认都是从国外的仓库下载,所以下载速度很慢,我们可以切换到国内的模块
(1)阿里云 http://mirrors.aliyun.com/pypi/simple/ (2)豆瓣 http://pypi.douban.com/simple/ (3)清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/ (4)中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/ (5)华中科技大学http://pypi.hustunique.com/
方法1:
命令临时切换
pip3 install 模块名 -i 仓库地址 --trusted-host 仓库地址
方法2:
pycharm 下载模块更换仓库地址
1.点击file>>>setting
3.在查找框页面点击manage repositories
4.输入想要更改的网址后,点击OK;
方法3:
永久更改网址,需要修改python内部解释器内置的配置文件(不推荐)
pip3下载模块报错
1.报错信息里面含有timeout
原因:网络不稳定
解决:检查网络或重复执行
2.报错信息里面含有warning警告版本过低
原因:pip版本过低
解决:拷贝提示信息里的更新命令运行既可
3.报错信息里面没有任何关键字就是一堆红色字体
原因:下载模块对计算机环境有要求
措施:下载之前预先准备好环境(百度搜一下)
python代码操作MySQL
# 调用pymysql模块 import pymysql # 创建连结对象 conn= pymysql.connect( # 回环地址,默认本机地址 host='127.0.0.1', # 端口号 port=3306, user='root', password='111', database='df', # 字符编码 charset='utf8' ) # 生成游标对象等待用户输入命令 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 自定义sql语句,前提纯在teacher表 sql = 'select * from teacher' # 执行sql语句 cursor.execute(sql) # 获取执行结果 res=cursor.fetchall(); print(res)
MySQL的练习
1、查询所有的课程的名称以及对应的任课老师姓名
# 需要查询两张表
# 通过课程表中对应的在老师名 # 使用联表法
SELECT
course.cname,
teacher.tname
FROM
teacher
INNER JOIN course ON teacher.tid = course.cid;
2、查询平均成绩大于八十分的同学的姓名和平均成绩
# 使用了两个表 # 查询score表中平均成绩>80分的学生id -- SELECT student_id,avg(num) FROM score GROUP BY student_id HAVING avg(num)>80; # 通过对应id再student表中查找对应学生 SELECT student.sname, t1.av_num FROM student INNER JOIN ( SELECT student_id, avg( num ) AS av_num FROM score GROUP BY student_id HAVING avg( num )> 80 ) AS t1 WHERE student.sid = t1.student_id;
3、查询没有报李平老师课的学生姓名
# 3题:teacher表中李平老师id对应的课程名 -- SELECT course.cid FROM teacher INNER JOIN course ON teacher.tid=course.teacher_id WHERE teacher.tid=2; # 通过而课程id号在sorce中选择出选课的学生 -- SELECT DISTINCT score.student_id FROM score INNER JOIN (SELECT course.cid as cod FROM teacher INNER JOIN course ON teacher.tid=course.teacher_id WHERE teacher.tid=2) as ta WHERE score.course_id=ta.cod; # 通过选课的学生反推出不选课的 SELECT sname FROM student WHERE sid NOT IN ( SELECT DISTINCT score.student_id FROM score INNER JOIN ( SELECT course.cid AS cod FROM teacher INNER JOIN course ON teacher.tid = course.teacher_id WHERE teacher.tid = 2 ) AS ta WHERE score.course_id = ta.cod );
4、查询没有同时选修物理课程和体育课程的学生姓名(即只选一个课程的学生)
# 4 找到体育。物理id # 找到选修物理的体育的对应id -- SELECT cid FROM course WHERE cname in ('体育','物理'); # 通过id分组选课学生,计数只出现一次的学生 -- SELECT student_id FROM score WHERE course_id in (SELECT cid FROM course WHERE cname in ('体育','物理')) GROUP BY student_id HAVING COUNT(student_id)=1; # 通过上述获取id选择学生姓名 SELECT sname FROM student WHERE sid IN ( SELECT student_id FROM score WHERE course_id IN ( SELECT cid FROM course WHERE cname IN ( '体育', '物理' )) GROUP BY student_id HAVING COUNT( student_id )= 1 );
5、查询挂科超过两门(包括两门)的学生姓名和班级
# 5.按学生分组,成绩低于60的执行 -- SELECT student_id FROM score WHERE num<60 GROUP BY student_id HAVING COUNT(course_id)>=2; # 找学生信息 -- SELECT * FROM student WHERE sid in (SELECT student_id FROM score WHERE num<60 GROUP BY student_id HAVING COUNT(course_id)>=2); # 通过学生信息找对应班级 SELECT class.caption, bd.sname FROM class INNER JOIN ( SELECT * FROM student WHERE sid IN ( SELECT student_id FROM score WHERE num < 60 GROUP BY student_id HAVING COUNT( course_id )>= 2 )) AS bd WHERE bd.class_id = class.cid;