day42

补充:exists方法:只返回布尔值 True False,返回True的时候外层查询语句执行,返回False的时候外层查询语句不再执行

Navicat可视化界面操作数据库:我们在编写python代码的时候使用第三方提供的软件,这些软件为我们封装了一些基础的方法,同时为我们的编写 提供了极大地遍历,那么对于数据库来说也有这样的傻瓜操作方式,今天我们来介绍的就是Navicat应用软件。在Na vicat中我们无需进行复杂的sql语句书写,只需要使用别人封装好的方式即可。

那么在这里为大家简单的介绍一些之前没有提到过的小知识。

MySQL中的注释 有两种
--
#

在navicat中如何快速的注释和解注释
ctrl + ? 加注释
ctrl + ? 基于上述操作再来一次就是解开注释
如果你的navicat版本不一致还有可能是
ctrl + shift + ?解开注释

因为Navicat的存在我们更多的操作也就落到了查询上(就像之前说得,我们做的更多的是查询,修改删除等操作已经封装好了),那么我就在这里放置几个练习题来给大家练手,通过结合之前的知识点我们可以简单的完成查询,复杂的反倒是如何查询的逻辑设计。相关数据库我会在结尾放上。

1、查询所有的课程的名称以及对应的任课老师姓名
2、查询平均成绩大于八十分的同学的姓名和平均成绩
3、查询没有报李平老师课的学生姓名
4、查询没有同时选修物理课程和体育课程的学生姓名
5、查询挂科超过两门(包括两门)的学生姓名和班级
答案会在下一个博客中公布,大家最好还是自己练习一下。

回归正题,我们几天的学习都是学习了简单的sql语句但是我们是python程序员诶,所以我们还是要使用python代码,接下来我们就介绍与一下python中封装的sql语句模块:pymysql。

pymysql模块不是内置的模块,需要我们自己安装 pip3 install 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) 我们通过这个语句得到一个游标完成数据库的连接


接下来为大家介绍一种特殊情况sql注入。当我们按照上述语句完成数据的的连接的时候我们尝试一下用户登录

username = input('>>>:')
password = input('>>>:')
sql = "select * from user where name=%s and password=%s"%(username,password)


当我们输入'jason' -- jhsadklsajdkla'或者'xxx' or 1=1 -- sakjdkljakldjasl'这种用户名的时候我们会发现我们好像并不能按照我们的想法来使用数据库了,这是因为我们将后面的代码注释或者我们使用了一个恒成立的条件,这是一种数据安全的缺陷,因此敏感的数据不要自己做拼接 交给execute帮你拼接即可。

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('用户名密码错误')
我们通过上述方式避免了sql注入的情况发生。


文章的结尾会为大家提供一个数据库供大家做查询的练习使用,答案会在明天的文章末尾。

原文地址:https://www.cnblogs.com/Jicc-J/p/12846306.html