MySQL-pymysql模块
1 pymysql模块安装
pymysql安装:
pip3 install pymysql -i https://pypi.douban.com/simple
安装成功!
检查是否安装成功,即在python环境下import pymysql,不报错就安装成功!
2 Python实现用户登录
代码实现:
import pymysqlusername = input("输入你的用户名:")
password = input("请输入你的密码:")conn = pymysql.connect(host="localhost", user='root', password='', database="pymysql") # 连接数据库
cursor = conn.cursor() # 打开游标
sql = "select * from userinfo where username=%s and password=%s"
cursor.execute(sql, [username, password]) # 这句话的返回值是的操作的行数
result = cursor.fetchone() # fetchone表示只拿第一个数据
cursor.close() # 关闭游标
conn.close() # 关闭数据库if result:print("登录成功")
else:print("用户名密码不正确")
如果含中文,应在pymysql.connect中添加charset=‘utf8’
如下:
3 SQL注入
一、SQL注入简介
SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库。
二、SQL注入攻击的总体思路
1.寻找到SQL注入的位置
2.判断服务器类型和后台数据库类型
3.针对不通的服务器和数据库特点进行SQL注入攻击
三、SQL注入攻击实例
import pymysqlusername = input("输入你的用户名:")
password = input("请输入你的密码:")conn = pymysql.connect(host="localhost", user='root', password='', database="pymysql")
cursor = conn.cursor()
sql = "select * from userinfo where username='%s' and password='%s'" % (username, password)
cursor.execute(sql)
result = cursor.fetchone()
cursor.close()
conn.close()if result:print("登录成功")
else:print("用户名密码不正确")
当用户名输入:'or 1=1-- (前面是个空格)的时候会产生SQL注入
这句SQL语句就变成了:
select * from userinfo where username=''or 1=1 -- ' and password='%s'
解释:or 后面有1=1 是永远成立的 然后-- 表示sql语句中的注释,因此会登录成功
四、解决方法
使用pymysql提供的参数化语句防止注入
import pymysqlusername = input("输入你的用户名:")
password = input("请输入你的密码:")conn = pymysql.connect(host="localhost", user='root', password='', database="pymysql")
cursor = conn.cursor()
sql = "select * from userinfo where username='%s' and password='%s'"
cursor.execute(sql, [username, password]) # 将参数写到execute函数里面
# cursor.execute(sql,user,pwd) # 直接写到后面
# cursor.execute(sql,{'u':username,'p':password}) #使用字典
result = cursor.fetchone()
cursor.close()
conn.close()if result:print("登录成功")
else:print("用户名密码不正确")
excute执行SQL语句的时候,必须使用参数化的方式,否则必然产生SQL注入漏洞。
4 pymysql其它函数
增删改属于一类,查属于一类
# 插入单条数据
import pymysqlusername = 'admin'
password = '123'conn = pymysql.connect(host="localhost", user='root', password='', database="pymysql") # 连接数据库
cursor = conn.cursor() # 打开游标
sql = "insert into userinfo(username,password) values(%s, %s)"
r = cursor.execute(sql, [username, password]) # 插入数据,execute执行会有个返回值。即受影响的行数(这里可令r等于其)
conn.commit() # 如果进行插入操作,需要进行提交。否则会没有插入成功
cursor.close() # 关闭游标
conn.close() # 关闭数据库
# 插入多条数据
import pymysqlconn = pymysql.connect(host="localhost", user='root', password='', database="pymysql") # 连接数据库
cursor = conn.cursor() # 打开游标
sql = "insert into userinfo(username,password) values(%s, %s)"
r = cursor.executemany(sql, [('laoyao','123'), ('egon','113')]) # 插入多条数据,executemany执行会有个返回值。即受影响的行数(这里可令r等于其)
conn.commit() # 如果进行插入操作,需要进行提交。否则会没有插入成功
cursor.close() # 关闭游标
conn.close() # 关闭数据库
# 查数据
# conn = pymysql.connect(host="localhost",user='root',password='',database="pymysql")
# cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) #这句话,会让操作的结果返回字典,而不是元组
# sql = "select * from userinfo"
# cursor.execute(sql)# cursor.scroll(1,mode='relative') # 游标相对当前位置移动
# cursor.scroll(2,mode='absolute') # 游标相对绝对位置移动
# result = cursor.fetchone() # 获取一行数据
# print(result)
# result = cursor.fetchone()
# print(result)
# result = cursor.fetchone()
# print(result)
# result = cursor.fetchall() # 获取所有的数据
# print(result)# result = cursor.fetchmany(4) # 获取多行数据
# print(result)
# cursor.close()
# conn.close()
# 新插入数据的自增ID: cursor.lastrowid
# import pymysql
#
# conn = pymysql.connect(host="localhost",user='root',password='123',database="pymsql")
# cursor = conn.cursor()
# sql = "insert into userinfo(username,password) values('asdfasdf','123123')"
# cursor.execute(sql)
# conn.commit()
# print(cursor.lastrowid) # 获得新增数据的自增ID,也是前面操作的主键的行数
# cursor.close()
# conn.close()
返回的元组:
(1, ‘alex’, ‘123’)
返回字典:
{‘uid’: 1, ‘username’: ‘alex’, ‘password’: ‘123’}
其他参考:
https://www.cnblogs.com/wupeiqi/articles/5713330.html
MySQL-pymysql模块相关推荐
- Mysql: pymysql 模块
import pymysql #导入pymysql模块client=pymysql.connect( #与服务端建立连接 host='127.0.0.1', port=3306, user='root ...
- 数据库开发——MySQL——pymysql模块
一.介绍 之前我们都是通过MySQL自带的命令行客户端工具mysql来操作数据库,那如何在python程序中操作数据库呢? 这就用到了pymysql模块,该模块本质就是一个套接字客户端软件,使用前需要 ...
- python数据库pymysql_Python——数据库04 Python操作MySQL pymysql模块使用,python,04python,MySQLpymysql...
PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb. Django中也可以使用PyMySQL连接MySQL数据库. PyMySQ ...
- python mysql倒序_day40:MySQL:python操作mysql:pymysql模块SQL注入攻击
目录 part1:用python连接mysql 1.用python连接mysql的基本语法 创建连接conn→创建游标对象cursor→执行sql语句execute→获取数据fetchone→释放游标 ...
- MySQL之pymysql模块
PyMySQL介绍 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb. Django中也可以使用PyMySQL连接MySQL数 ...
- mysql七个模块_mysql(pymysql模块的使用,视图,触发器)
本节重点: pymysql的下载和使用 execute()之sql注入 增.删.改:conn.commit() 查:fetchone.fetchmany.fetchall 一.pymysql的下载和使 ...
- MySQL -Naivacat工具与pymysql模块
Navicat 在生产环境中操作MySQL数据库还是推荐使用命令行工具mysql,但在我们自己开发测试时,可以使用可视化工具Navicat,以图形界面的形式操作MySQL数据库. 官网下载:https ...
- mysql用户管理+pymysql模块
mysql 用户管理 Mysql 是一个tcp 服务器 用于接收用户端发送的指令,操作服务器上的文件数据 在mysql自带的mysql数据库中有4个表用于用户管理的 分别是: 优先级从高到低 user ...
- MySQL 之Navicat Premium 12安装使用、pymysql模块使用、sql注入问题的产生与解决
阅读目录 一.Navicat Premium 12简介与使用: 二.pymysql模块的使用: 查: 增删改 三.sql注入问题产生与解决方法: 本文内容提要: Navicat Premium 12 ...
- mysql六:数据备份、pymysql模块
阅读目录 一 MySQL数据备份 二 pymysql模块 一 MySQL数据备份 #1. 物理备份: 直接复制数据库文件,适用于大型数据库环境.但不能恢复到异构系统中如Windows. #2. 逻辑备 ...
最新文章
- tensorflow生成对抗网络
- 回归方程的拟合优度检验_计量经济学第四讲(多元线性回归模型:基本假定,参数估计,统计检验)...
- CodeForces-734E Anton and Tree 树的直径
- 心电图多少为正常范围_研究:心跳超过70次/分,至少减寿3年!正常心率范围是多少?...
- gre biochemistry_【备考精选】2020年11月6日GRE写作Issue预测分享
- 微信小程序 - 回到自己位置(map)
- 数据库流行度6月排行榜:Oracle飙升MySQL止跌回升
- html 复选按钮(input checkbox)
- 汇编学习--7.13--标志寄存器
- matlab画随机信号,(最新整理)随机信号处理基础matlab仿真
- volatility用法
- OpencCV制作相框效果
- Python采集CSDN博客排行榜数据
- ODCC开放数据中心峰会即将召开 十道“技术大餐”提前揭秘
- mysql1.7(mysql优化,mysql-mmm软件介绍,mysql高可用集群。)
- 30多岁转行做python_零基础30 岁可以转行做Python开发吗?
- alienskineyecandy mac
- 谱聚类(spectral clustering)及其实现详解
- Axure RP 动态面板介绍
- js版星级评分 入门级 原生js实现
热门文章
- 湖北省钟祥一中2021高考成绩查询,钟祥2021中考分数线查询
- Core Data 详解
- Ubuntu 16.04 引导修复(boot-repair)
- .Android手机邮箱设置详细教程
- 亚马逊云科技的AI新引擎,如何助力企业应对“乌卡时代”?
- 政策重大升级、成立最强行业联盟,上海要做长三角区块链产业发展领头羊?...
- Java 12 来了,我们应该采用嘛?
- 切比雪夫,霍夫丁不等式证明
- Python 调用动态链接库
- ​Vue 3 这个坑我踩了,你们一定要小心