首页 > 数据库 >MySQL之Navicat和pymysql模块

MySQL之Navicat和pymysql模块

时间:2022-08-19 08:11:27浏览次数:73  
标签:-- pymysql Navicat score student MySQL where id select

下载安装
官网地址:http://www.navicat.com.cn/
主要功能介绍
1.可以创建、管理和维护数据库
2.可以充当各种数据库软件的客户端,并且提供操作数据库的快捷方式
3.用以方便管理 MySQL、Oracle、PostgreSQL、SQLite、SQL Server、MariaDB 和 MongoDB 等不同类型的数据库
4.支持创建库,表,增删改查等
多表查询练习题
# 查询所有的课程的名称以及对应的任课老师姓名
# 1.先确定好需要几张表的数据  course teacher
# 2.查看一下表的数据是否是我们需要的
-- select * from course;
-- select * from teacher;
# 3.先获取课程名称再获取老师数据(连表操作)
-- select course.cname,teacher.tname FROM course inner JOIN teacher on teacher_id=tid;
#4、查询平均成绩大于八十分的同学的姓名和平均成绩
-- 1.先确定需要查询几张表的数据 score  student
-- select * from score; 
-- select * from student;
-- 2.以学生id为单位 先查询平均成绩
-- select student_id,avg(num) from score GROUP BY student_id HAVING avg(num) >80;
-- 3.再用多表查询 连表操作
-- select student.sname,stu.avg(num) from student inner join (select student_id,avg(num) from score GROUP BY student_id HAVING avg(num) >80) as stu on student.sid = stu.student_id; 
#7、查询没有报李平老师课的学生姓名
# 1.先确认要查询几张表的数据 student teacher course 
# 2.先确定李平老师的授课id号
-- SELECT tid FROM teacher WHERE tname='李平老师';
# 3.再获取李平老师课程编号
-- select cid from course where teacher_id =(SELECT tid FROM teacher WHERE tname='李平老师');
# 4.查询李平老师课程的学生id
-- select DISTINCT student_id from score where course_id in(select cid from course where teacher_id =(SELECT tid FROM teacher WHERE tname='李平老师'));
# 5.获取没有李平老师课程的学生姓名
-- select sname from student where sid not in(select DISTINCT student_id from score where course_id in(select cid from course where teacher_id =(SELECT tid FROM teacher WHERE tname='李平老师')));

#8、查询没有同时选修物理课程和体育课程的学生姓名(只要选了其中一门的 两门都选和都没选的都不要)
# 1.先确定要查找数据的表有几个  score student course 
# 2.先获取体育课和物理课程的id
-- select cid from course where cname in ('物理','体育');
# 4.以学生为单位查询分别报了两门课程的学生 筛选出只选了一门课程的学生
-- select score.student_id FROM score where course_id in (select cid from course where cname in ('物理','体育')) GROUP BY score.student_id having COUNT(score.student_id) =1;
# 根据学生id 查询学生姓名
-- select sname from student where sid in(select score.student_id FROM score where course_id in (select cid from course where cname in ('物理','体育')) GROUP BY score.student_id having COUNT(score.student_id) =1);
#9、查询挂科超过两门(包括两门)的学生姓名和班级
# 1.先筛选出成绩小于60分的学生
-- select student_id from score where num<60;
# 查询成绩不合格超过两门的学生
-- select student_id from score where num<60 GROUP BY student_id HAVING COUNT(student_id)>=2;

# 获取学生姓名 
select sname from student where sid in (select student_id from score where num<60 GROUP BY student_id HAVING COUNT(student_id)>=2) ;

pyMySQL模块的基本使用

python操作数据库
import pymysql
# 1.连接服务端
conn = pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='123',
    database='db',
    charset='utf8mb4'
)
# 2.产生一个游标对象(等待输入命令)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)  # 让数据自动组成字典的形式返回
# 3.编写sql语句
sql1 = 'select * from teacher'
# 4.发送给服务端
cursor.execute(sql1)
# 5.获取命令的执行结果
res = cursor.fetchall()   # fetchone() 查询一条  # fetchmany() 
print(res)
1.数据执行结果的三种获取方式
fetchall()  # 获取所有数据
 第一次获取的是所有值 在打印一次获取的是空字典 因为第一次已经把值取完了
fetchone()  # 获取第一条数据
第二次获取的时候是获取第二个值
fetchmany() 
# 在括号内填入要获取的数据条数 默认是1条 超过数据量的话返回最大数据量


------------
类似于光标移动的概念
cursor.scroll(2,mode='relative')    # 基于当前位置往后移动两位
cursor.scroll(1,mode='absolute')   # 基于数据开头位置往后移动
res = cursor.fetchone() 
print(res)
python操作MySQL数据库的增删改查需要在python解释器上做二次确认才可以操作成功
conn.commit() # 二次确认
每次增删改查数据都需要二次确认 为了更方便操作 可以在连接服务端的配置里加上
autocommit =Ture

execute 有一个返回值 每次插入或者查找数据的时候会返回一个现在的操作影响了几行数据的一个数据值

获取结果集注意事项
获取用户输入
import pymysql
# 1.连接服务端
conn = pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='123',
    database='db',
    charset='utf8mb4'
)
# 2.产生一个游标对象(等待输入命令)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)  # 让数据自动组成字典的形式返回
# 3.获取用户输入
username = input('username>>:').strip()
password = input('password>>>>:').strip()
# 4.编写sql语句
sql1 = "select * from userinfo where name ='%s' and pwd ='%s'"%(username,password)
# 4.发送给服务端
cursor.execute(sql1)
# 5.获取命令的执行结果
res = cursor.fetchall()
if res:
    print('登录成功')
else:
    print('用户名或密码错误')

sql注入问题
问题
	SQL注入
	select * from userinfo where name='jason' -- haha' and pwd=''
	select * from userinfo where name='xyz' or 1=1  -- heihei' and pwd=''
本质
	利用一些特殊符号的组合产生了特殊的含义从而逃脱了正常的业务逻辑
措施
	针对用户输入的数据不要自己处理 交给专门的方法自动过滤
    sql = "select * from userinfo where name=%s and pwd=%s"
    cursor.execute(sql, (username, password))  # 自动识别%s 并自动过滤各种符合 最后合并数据
补充
	 cursor.executemany() # 可以一次性插入多行数据 用列表插入

sql语句补充知识点

1.as语法:可以起别名,起表名
2.comment :给表和字段添加注释的 
  eg:create table server(id int) comment '这个server意思是服务器表'
	create table t1(
    	id int comment '用户编号',
       name varchar(16) comment '用户名'
    ) comment '用户表';
 查看注释的两个地方:
   1.show create tables;
   2.use information_schema  # mysql自带的临时的库


3.concat :用于分组之前多个字段数据的拼接
4.concat_ws:如果有多个字段,并且分隔符一直 ,那么可以减少分隔符的写入
5.exists: exists后面的如果sql语句如果有结果则执行前面的sql语句,没有结果则不执行
eg:select * from table where exists(select * from department where id<100)



标签:--,pymysql,Navicat,score,student,MySQL,where,id,select
From: https://www.cnblogs.com/Hsummer/p/16600535.html

相关文章

  • Navicat的使用与python中使用MySQL的基本方法
    Navicat的使用与python中使用MySQL的基本方法Navicat的下载及安装下载地址http://www.navicat.com.cn/download/navicat-premium由于navict的功能非常强大所以navic......
  • Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationExceptio
    多表查询时mysql语句报错Cause:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:Column'XX'inwhereclauseisambiguous原因多表查......
  • MySQL获取汉字的拼音首字母
    一、函数这里是通过函数调用进行获取汉字的拼音首字母。DELIMITER$$CREATEFUNCTION`pinyin`(P_NAMEVARCHAR(255))RETURNSvarchar(255)CHARSETutf8DETERMINIST......
  • 【8.18】MySQL数据库(5)
    学习内容概要Navicat可视化软件多表查询练习题python操作MySQL需要用到pymysql第三方模块SQL语法知识点补充了解as语法exist语法concat语法concat_ws......
  • python 操作mysql
    importpymysqldbinfo={"host":"192.16.8.x","post":3306,"user":"root","password":"xxxx","database":"xxx"} importpymysqlclassDBope......
  • Navicat可视化软件
    Navicat可视化软件一、介绍可以充当很多数据库软件的客户端,主要用于MySQL二、下载1.网址http://www.navicat.com.cn正版收费,可以百度破解版三、主要功能介绍1.连......
  • 2022-8-17 mysql 第三天
    DQL查询语言子查询按照结果集的行列数不同,子查询可以分为以下几类:标量子查询:结果集只有一行一列(单行子查询)列子查询:结果集有一列多行行子查询:结果集有一行多列表子......
  • mysql-5
    Navicat可视化软件可以充当很多数据库软件的客户端提供可视化操作数据库的快捷方式(鼠标点击)最主要的用于MySQL1.下载---官网https://www.navicat.com.cn/(正版收费)---破......
  • 2022-08-18 第六小组 张宁杰 MySQL数据库(3)MySQL常用函数
    MySQL常用函数聚合函数count:计数。count(*)≈count(1)>count(主键)count(*):MySQL对count(*)底层优化,count(0)。count(1)count(主键)count(字段)min:最小值max:最......
  • MySQL数据备份和恢复
    MySQL数据备份和恢复备份原因运维工作的核心简单概括就两件事:第一个是保护公司的数据尽量减少数据的丢失备份类型冷备1.需要停机维护,停止服务,备份数据2.这些备......