一、Navicat软件
Navicat相当于pycharm软件,已经将mysql进行了封装,无需再编写SQL语句
1.mysql是不区分大小写的,在python中用时可以使用upper以及lower转大小写
2.MySQL建议关键字大写
3.MySQL的注释使用#以及__
4.Navicat中快速添加注释和解注释
Ctrl+? 加注释解注释
或者Ctrl+shift+? 加注释解注释
二、Navicat的练习
-- 1、查询所有的课程的名称以及对应的任课老师姓名 -- SELECT -- course.cname, -- teacher.tname -- FROM -- course -- INNER JOIN teacher ON course.teacher_id = teacher.tid; -- 4、查询平均成绩大于八十分的同学的姓名和平均成绩 -- SELECT -- student.sname, -- t1.avg_num -- FROM -- student -- INNER JOIN ( -- SELECT -- score.student_id, -- avg( num ) AS avg_num -- FROM -- score -- INNER JOIN student ON score.student_id = student.sid -- GROUP BY -- score.student_id -- HAVING -- AVG( num ) > 80 -- ) AS t1 ON student.sid = t1.student_id; -- 7、 查询没有报李平老师课的学生姓名 # 分步操作 # 1 先找到李平老师教授的课程id # 2 再找所有报了李平老师课程的学生id # 3 之后去学生表里面取反 就可以获取到没有报李平老师课程的学生姓名 -- SELECT -- student.sname -- FROM -- student -- WHERE -- sid NOT IN ( -- SELECT DISTINCT -- score.student_id -- FROM -- score -- WHERE -- score.course_id IN ( SELECT course.cid FROM teacher INNER JOIN course ON teacher.tid = course.teacher_id WHERE teacher.tname = '李平老师' ) -- ); -- 8、 查询没有同时选修物理课程和体育课程的学生姓名 -- (只要选了一门的 选了两门和没有选的都不要) # 1 先查物理和体育课程的id # 2 再去获取所有选了物理和体育的学生数据 # 3 按照学生分组 利用聚合函数count筛选出只选了一门的学生id # 4 依旧id获取学生姓名 -- SELECT -- student.sname -- FROM -- student -- WHERE -- student.sid IN ( -- SELECT -- score.student_id -- FROM -- score -- WHERE -- score.course_id IN ( SELECT course.cid FROM course WHERE course.cname IN ( '物理', '体育' ) ) -- GROUP BY -- score.student_id -- HAVING -- COUNT( score.course_id ) = 1 -- ); -- 9、 查询挂科超过两门(包括两门)的学生姓名和班级 # 1 先筛选出所有分数小于60的数据 # 2 按照学生分组 对数据进行计数获取大于等于2的数据 SELECT class.caption, student.sname FROM class INNER JOIN student ON class.cid = student.class_id WHERE student.sid IN ( SELECT score.student_id FROM score WHERE score.num < 60 GROUP BY score.student_id HAVING COUNT( score.course_id ) >= 2 );
三、pymysql模块
支持python代码操作数据库
pip3 install pymysql
四、SQL的注入
使用pymysql模块,编写注册功能
import pymysql conn = pymysql.connect( host = '127.0.0.1', port = 3306, user = 'root', password = '123456', database = 'day48', charset = 'utf8' # 编码千万不要加- ) # 链接数据库 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) username = input('>>>:') password = input('>>>:') sql = "select * from user where name=%s and password=%s" # 不要手动拼接数据 先用%s占位 之后将需要拼接的数据直接交给execute方法即可 print(sql) rows = cursor.execute(sql,(username,password)) # 自动识别sql里面的%s用后面元组里面的数据替换 if rows: print('登录成功') print(cursor.fetchall()) else: print('用户名密码错误')