Python使用pymysql模块操作mysql增删改查实例分析


Posted in Python onDecember 19, 2019

本文实例讲述了Python使用pymysql模块操作mysql增删改查。分享给大家供大家参考,具体如下:

# -*- coding:utf-8 -*-
import pymysql
user = input('请输入用户名:')
pwd = input('请输入密码:')
# 1.连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='123', db='t1', charset='utf8')
print(conn)
# 2.创建游标
cursor = conn.cursor()
#注意%s需要加引号
sql = "select * from t1.userinfo where username='%s' and pwd='%s'" %(user, pwd)
print(sql)
# 3.执行sql语句
cursor.execute(sql)
result=cursor.execute(sql) #执行sql语句,返回sql查询成功的记录数目
print(result)
# 关闭连接,游标和连接都要关闭
cursor.close()
conn.close()
if result:
 print('登陆成功')
else:
 print('登录失败')

下面是执行过程

请输入用户名:lisi
请输入密码:123
<pymysql.connections.Connection object at 0x000001BEFABFE240>
select * from t1.userinfo where username='lisi' and pwd='123'

登陆成功

二、execute()之sql注入

方式

#1、sql注入之:用户存在,绕过密码
lisi' -- 任意字符
#2、sql注入之:用户不存在,绕过用户与密码
xxx' or 1=1 -- 任意字符

请输入用户名:sdj;fja;' or 1=1 -- ;j;j;jj;jjkdsjfjsd
请输入密码:123
<pymysql.connections.Connection object at 0x000001EF2BE3E240>
select * from t1.userinfo where username='sdj;fja;' or 1=1 -- ;j;j;jj;jjkdsjfjsd' and pwd='123'

登陆成功

解决:

1采用列表的方式

# 原来是我们对sql进行字符串拼接
# sql="select * from userinfo where name='%s' and password='%s'" %(username,pwd)
# print(sql)
# result=cursor.execute(sql)
#改写为(execute帮我们做字符串拼接,我们无需且一定不能再为%s加引号了)
sql="select * from userinfo where name=%s and pwd=%s" #!!!注意%s需要去掉引号,因为pymysql会自动为我们加上
result=cursor.execute(sql,[user,pwd]) #pymysql模块自动帮我们解决sql注入的问题,只要我们按照pymysql的规矩来。

2采用字典的方法

# -*- coding:utf-8 -*-
import pymysql
user = input('请输入用户名').strip()
pwd = input('请输入密码').strip()
# 连接服务端
conn = pymysql.connect(
 host='127.0.0.1',
 user='root',
 password="123",
 database='t1',
 port=3306,
 charset='utf8'
)
# -- ddadad
# 创建游标对象
cur = conn.cursor()
sql = "select * from userinfo where username = %(name)s and pwd = %(password)s"
print(sql)
# resultNum = cur.execute(sql,[user,pwd])
resultNum = cur.execute(sql,{"name":user,"password":pwd})
print(resultNum)
cur.close()
conn.close()
if resultNum:
 print('登陆成功')
else:
 print('登陆失败')

三、增、删、改:conn.commit()

commit()方法:在数据库里增、删、改的时候,必须要进行提交,否则插入的数据不生效。

基本框架

import pymysql
username = input('请输入用户名:')
pwd = input('请输入密码:')
# 1.连接
conn = pymysql.connect(host='localhost', port=3306, user='root', password='123', db='db8', charset='utf8')
# 2.创建游标
cursor = conn.cursor()
--------增删改操作----------------
#一定记得commit
conn.commit()
# 4.关闭游标
cursor.close()
# 5.关闭连接
conn.close()

增--》一组数据

sql='insert into userinfo(username,pwd) values(%s,%s)'
effect_row=cursor.execute(sql,(username,pwd)) # effect_row=1

增---》多组数据

sql='insert into userinfo(username,pwd) values(%s,%s)'
effect_row=cursor.executemany(sql,[('赵八','112'),('刘九','114'),('封十','911')]) #effect_row=3

sql='delete from userinfo where pwd like "%2"'
effect_row=cursor.execute(sql)

sql='update userinfo set username = %s where pwd="114"'
effect_row=cursor.execute(sql,'niu') #effect_row=2

 **上面的变量 effect_row=cursor.execute(...) ,返回的是成功改变的条目数字

四、查:fetchone、fetchmany、fetchall

表的内容

mysql> select * from userinfo;
+----+----------+-----+
| id | username | pwd |
+----+----------+-----+
| 1 | mjj  | 123 |
| 3 | 张三  | 110 |
| 4 | 李四  | 119 |
+----+----------+-----+
3 rows in set (0.00 sec)

固定格式

import pymysql
# 1.连接
conn = pymysql.connect(host='localhost', port=3306, user='root', password='', db='db8', charset='utf8')
# 2.创建游标
cursor = conn.cursor()
sql = 'select * from userinfo'
cursor.execute(sql)
------------执行的查询--------------
# 4.关闭游标
cursor.close()
# 5.关闭连接
conn.close()

fetchone查看一条符合条件的数据,可以连续使用,查询的是上一个fetchone的后面一条

# 查询第一行的数据
row = cursor.fetchone()
print(row) # (1, 'mjj', '123')
# 查询第二行数据
row = cursor.fetchone()
print(row) # (3, '张三', '110')

fetchall():查询所有符合条件的数据

# 获取所有的数据
rows = cursor.fetchall()
print(rows)
#运行结果
((1, 'mjj', '123'), (3, '张三', '110'), (4, '李四', '119')) 取到的返回值是元组

fetchmany:获取指定的条数数据

row=cursor.fetchmany(3)
print(row)

cursor.scroll(num,mode='relative|absolute')  当mode=absolute时,num不能小于0

cursor.scroll(1,mode='relative') # 相对当前位置移动
cursor.scroll(2,mode='absolute') # 相对绝对位置移动
# 查询第一行的数据
row = cursor.fetchone()
print(row) # (1, 'mjj', '123')
# 查询第二行数据
row = cursor.fetchone() # (3, '张三', '110')
print(row)
cursor.scroll(-1,mode='relative') #设置之后,光标相对于当前位置往前移动了一行,所以打印的结果为第二行的数据
row = cursor.fetchone()
print(row)
cursor.scroll(0,mode='absolute') #设置之后,光标相对于首行没有任何变化,所以打印的结果为第一行数据
row = cursor.fetchone()
print(row)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
详解Python中__str__和__repr__方法的区别
Apr 17 Python
用Python遍历C盘dll文件的方法
May 06 Python
python中urlparse模块介绍与使用示例
Nov 19 Python
Python采集代理ip并判断是否可用和定时更新的方法
May 07 Python
python3+requests接口自动化session操作方法
Oct 13 Python
浅析PyTorch中nn.Module的使用
Aug 18 Python
python 爬虫百度地图的信息界面的实现方法
Oct 27 Python
如何给Python代码进行加密
Jan 10 Python
python爬虫实现POST request payload形式的请求
Apr 30 Python
matplotlib grid()设置网格线外观的实现
Feb 22 Python
python3读取文件指定行的三种方法
May 24 Python
Python上下文管理器Content Manager
Jun 26 Python
python 普通克里金(Kriging)法的实现
Dec 19 #Python
Python函数参数类型及排序原理总结
Dec 19 #Python
python中with语句结合上下文管理器操作详解
Dec 19 #Python
Django中密码的加密、验密、解密操作
Dec 19 #Python
利用OpenCV和Python实现查找图片差异
Dec 19 #Python
Python文本处理简单易懂方法解析
Dec 19 #Python
python类中super() 的使用解析
Dec 19 #Python
You might like
Phpbean路由转发的php代码
2008/01/10 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
2017/07/03 PHP
PHP下用Swoole实现Actor并发模型的方法
2019/06/12 PHP
jQuery select操作控制方法小结
2010/05/26 Javascript
使用jQuery模板来展现json数据的代码
2010/10/22 Javascript
常用的JavaScript WEB操作方法分享
2015/02/28 Javascript
JavaScript实现LI列表数据绑定的方法
2015/08/04 Javascript
javascript日期格式化方法汇总
2015/10/04 Javascript
AngularJS入门教程之AngularJS指令
2016/04/18 Javascript
jQuery点击输入框显示验证码图片
2016/05/19 Javascript
轻松学习Javascript闭包
2017/03/01 Javascript
AngularJS select设置默认值的实现方法
2017/08/25 Javascript
javascript算法之二叉搜索树的示例代码
2017/09/12 Javascript
vue基于Element构建自定义树的示例代码
2017/09/19 Javascript
使用vue-cli脚手架工具搭建vue-webpack项目
2019/01/14 Javascript
js图片无缝滚动插件使用详解
2020/05/26 Javascript
Vue.js组件使用props传递数据的方法
2019/10/19 Javascript
[02:34]肉山说——泡妞篇
2014/09/16 DOTA
python读取Android permission文件
2013/11/01 Python
基于Python List的赋值方法
2018/06/23 Python
Django添加KindEditor富文本编辑器的使用
2018/10/24 Python
Python语法之精妙的十个知识点(装B语法)
2020/01/18 Python
Python如何实现的二分查找算法
2020/05/27 Python
Python内置方法和属性应用:反射和单例(推荐)
2020/06/19 Python
Python3 webservice接口测试代码详解
2020/06/23 Python
Django中Aggregation聚合的基本使用方法
2020/07/09 Python
matplotlib 多个图像共用一个colorbar的实现示例
2020/09/10 Python
python BeautifulSoup库的安装与使用
2020/12/17 Python
基于html5 canvas做批改作业的小插件
2020/05/20 HTML / CSS
ETO男装官方网店:ETO Jeans
2019/02/28 全球购物
车辆委托书范本
2014/10/05 职场文书
公司门卫岗位职责
2015/04/13 职场文书
MySQL优化之如何写出高质量sql语句
2021/05/17 MySQL
解决MySQL Varchar 类型尾部空格的问题
2022/04/06 MySQL
CSS文本阴影 text-shadow 悬停效果详解
2022/05/25 HTML / CSS
python解析照片拍摄时间进行图片整理
2022/07/23 Python