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模块相关推荐

  1. Mysql: pymysql 模块

    import pymysql #导入pymysql模块client=pymysql.connect( #与服务端建立连接 host='127.0.0.1', port=3306, user='root ...

  2. 数据库开发——MySQL——pymysql模块

    一.介绍 之前我们都是通过MySQL自带的命令行客户端工具mysql来操作数据库,那如何在python程序中操作数据库呢? 这就用到了pymysql模块,该模块本质就是一个套接字客户端软件,使用前需要 ...

  3. python数据库pymysql_Python——数据库04 Python操作MySQL pymysql模块使用,python,04python,MySQLpymysql...

    PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb. Django中也可以使用PyMySQL连接MySQL数据库. PyMySQ ...

  4. python mysql倒序_day40:MySQL:python操作mysql:pymysql模块SQL注入攻击

    目录 part1:用python连接mysql 1.用python连接mysql的基本语法 创建连接conn→创建游标对象cursor→执行sql语句execute→获取数据fetchone→释放游标 ...

  5. MySQL之pymysql模块

    PyMySQL介绍 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb. Django中也可以使用PyMySQL连接MySQL数 ...

  6. mysql七个模块_mysql(pymysql模块的使用,视图,触发器)

    本节重点: pymysql的下载和使用 execute()之sql注入 增.删.改:conn.commit() 查:fetchone.fetchmany.fetchall 一.pymysql的下载和使 ...

  7. MySQL -Naivacat工具与pymysql模块

    Navicat 在生产环境中操作MySQL数据库还是推荐使用命令行工具mysql,但在我们自己开发测试时,可以使用可视化工具Navicat,以图形界面的形式操作MySQL数据库. 官网下载:https ...

  8. mysql用户管理+pymysql模块

    mysql 用户管理 Mysql 是一个tcp 服务器 用于接收用户端发送的指令,操作服务器上的文件数据 在mysql自带的mysql数据库中有4个表用于用户管理的 分别是: 优先级从高到低 user ...

  9. MySQL 之Navicat Premium 12安装使用、pymysql模块使用、sql注入问题的产生与解决

    阅读目录 一.Navicat Premium 12简介与使用: 二.pymysql模块的使用: 查: 增删改 三.sql注入问题产生与解决方法: 本文内容提要: Navicat Premium 12 ...

  10. mysql六:数据备份、pymysql模块

    阅读目录 一 MySQL数据备份 二 pymysql模块 一 MySQL数据备份 #1. 物理备份: 直接复制数据库文件,适用于大型数据库环境.但不能恢复到异构系统中如Windows. #2. 逻辑备 ...

最新文章

  1. tensorflow生成对抗网络
  2. 回归方程的拟合优度检验_计量经济学第四讲(多元线性回归模型:基本假定,参数估计,统计检验)...
  3. CodeForces-734E Anton and Tree 树的直径
  4. 心电图多少为正常范围_研究:心跳超过70次/分,至少减寿3年!正常心率范围是多少?...
  5. gre biochemistry_【备考精选】2020年11月6日GRE写作Issue预测分享
  6. 微信小程序 - 回到自己位置(map)
  7. 数据库流行度6月排行榜:Oracle飙升MySQL止跌回升
  8. html 复选按钮(input checkbox)
  9. 汇编学习--7.13--标志寄存器
  10. matlab画随机信号,(最新整理)随机信号处理基础matlab仿真
  11. volatility用法
  12. OpencCV制作相框效果
  13. Python采集CSDN博客排行榜数据
  14. ODCC开放数据中心峰会即将召开 十道“技术大餐”提前揭秘
  15. mysql1.7(mysql优化,mysql-mmm软件介绍,mysql高可用集群。)
  16. 30多岁转行做python_零基础30 岁可以转行做Python开发吗?
  17. alienskineyecandy mac
  18. 谱聚类(spectral clustering)及其实现详解
  19. Axure RP 动态面板介绍
  20. js版星级评分 入门级 原生js实现

热门文章

  1. 湖北省钟祥一中2021高考成绩查询,钟祥2021中考分数线查询
  2. Core Data 详解
  3. Ubuntu 16.04 引导修复(boot-repair)
  4. .Android手机邮箱设置详细教程
  5. 亚马逊云科技的AI新引擎,如何助力企业应对“乌卡时代”?
  6. 政策重大升级、成立最强行业联盟,上海要做长三角区块链产业发展领头羊?...
  7. Java 12 来了,我们应该采用嘛?
  8. 切比雪夫,霍夫丁不等式证明
  9. Python 调用动态链接库
  10. ​Vue 3 这个坑我踩了,你们一定要小心