day06 python操作数据库 实现用户登录
内容回顾
查询关键字
limit 分页 :限制数据的显示行数
limit 数字1 :从第0行开始到第一个数字的行
limit 数字1 数字2 :从数字1行开始,显示数字2个行
多表查询
连表操作
两个表拼接在一起 然后单表查询 on 指定两个表拼接的依据 那个字段相等
inner join 内连接
left join 左连接
right join 右连接
select * from emp inner join dep on emp.dep_id = dep.id;
子查询
一条sql语句的查询结果用于另一条sql语句的条件
#分布操作 先干这个 在干那个
可视化软件使用
能够充当数据库客户端的可视化软件其实也有很多
操作MySQL最为方便的当属Navicat(收费 破解版)
"""该软件底层操作其实还是SQL语句"""
1.连接数据库
2.查看数据库 表 记录
3.创建数据库 表 记录
4.设计表
5.添加外键(还支持修改SQL)
6.逆向数据库到模型
7.转储SQL文件
今日内容概要
多表查询练习
python操作mysql
基于python与mysql实现用户注册登录
今日内容详细
多表查询练习
-- 7、 查询没有报李平老师课的学生姓名
#需要老师表 课程表 成绩表 学生表
#先找李平老师课程id
-- select course.cid from teacher INNER JOIN course on teacher.tid=course.teacher_id WHERE teacher.tname='李平老师'
#通过课程id去成绩表找上了李平老师课程的同学id
-- select distinct student_id from score where course_id in (select course.cid from teacher INNER JOIN course on teacher.tid=course.teacher_id WHERE teacher.tname='李平老师')
#通过id 去找没有
-- 8、 查询没有同时选修物理课程和体育课程的学生姓名
#需要三张表
#先找物理课和体育课程的课程id
-- select cid from course WHERE cname in ('物理','体育')
#在成绩表找有 物理课程和体育课程学生的id
-- select student_id as a1 from score WHERE course_id in (select cid from course WHERE cname in ('物理','体育')) GROUP BY student_id having COUNT(course_id)=1
-- select sname from student where sid in (select student_id as a1 from score WHERE course_id in (select cid from course WHERE cname in ('物理','体育')) GROUP BY student_id having COUNT(course_id)=1
-- )
--
-- 9、 查询挂科超过两门(包括两门)的学生姓名和班级
#两张表
#先找挂科超过两门的学生id
-- select student_id from score where num <60 GROUP BY student_id HAVING count(num)>=2
#通过班级id 找对应班级
select student.sname,class.caption from class INNER JOIN student on student.class_id=class.cid where student.sid in (select student_id from score where num <60 GROUP BY student_id HAVING count(num)>=2)
python代码操作mysql
python 也叫做 胶水语言、调包侠(贬义词>>>褒义词)
python厉害的是他的模块、软件
#python代码操作mysql 主要使用了一个叫做 pymysql的模块
import pymysql #导入pymysql模块
#定义一个连接对象
conn=pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='123',
charset='utf8', #这里不能写utf-8 语法规范
database='db5_1'
)
#定义一个游标 类似于cmd mysql 里面等你输入sql语句的命令行 (里面的保证了cursor.fetchall 获取的是字典)
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)
#定义sql语句
sql="select * from userinfo"
#执行sql语句
aa=cursor.execute(sql) #返回值是受影响的行数 execute 执行sql语句
print(aa)
#获取执行结果 是服务端返回给我们的结果 再进行二次过滤,获取全部 或者一行或者几行 取文件是根据光标取得 读取一次光标移动一次
cursor.scroll(1,'relative') #相对当前位置移动一格 光标在1 获取