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中Django框架下的staticfiles使用简介
May 30 Python
python 全文检索引擎详解
Apr 25 Python
python构建深度神经网络(DNN)
Mar 10 Python
查看Django和flask版本的方法
May 14 Python
在Python 中同一个类两个函数间变量的调用方法
Jan 31 Python
深入了解Django中间件及其方法
Jul 26 Python
python实现把两个二维array叠加成三维array示例
Nov 29 Python
python 经典数字滤波实例
Dec 16 Python
Django中密码的加密、验密、解密操作
Dec 19 Python
python scrapy重复执行实现代码详解
Dec 28 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
Mar 14 Python
Python CategoricalDtype自定义排序实现原理解析
Sep 11 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
地摊中国 - 珍藏老照片
2020/08/18 杂记
PHP聊天室技术
2006/10/09 PHP
PHP 程序授权验证开发思路
2009/07/09 PHP
PHP 开发环境配置(测试开发环境)
2010/04/28 PHP
php 解决旧系统 查出所有数据分页的类
2012/08/27 PHP
JavaScript 在各个浏览器中执行的耐性
2009/04/06 Javascript
JavaScript 学习历程和心得分享
2010/12/12 Javascript
jQuery实现固定在网页顶部的菜单效果代码
2015/09/02 Javascript
使用Vue.js创建一个时间跟踪的单页应用
2016/11/28 Javascript
bootstrap 模态框(modal)实现水平垂直居中显示
2017/01/23 Javascript
ES6新特性之模块Module用法详解
2017/04/01 Javascript
JS利用cookies设置每隔24小时弹出框
2017/04/20 Javascript
Vue实现点击后文字变色切换方法
2018/02/11 Javascript
浅谈Webpack 是如何加载模块的
2018/05/24 Javascript
解决Vue+Element ui开发中碰到的IE问题
2018/09/03 Javascript
在Vue 中使用Typescript的示例代码
2018/09/10 Javascript
vue3修改link标签默认icon无效问题详解
2019/10/09 Javascript
javascript操作元素的常见方法小结
2019/11/13 Javascript
wxPython 入门教程
2008/10/07 Python
python通过pil为png图片填充上背景颜色的方法
2015/03/17 Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
2016/12/27 Python
flask/django 动态查询表结构相同表名不同数据的Model实现方法
2019/08/29 Python
Python pandas.DataFrame 找出有空值的行
2019/09/09 Python
在Python中使用turtle绘制多个同心圆示例
2019/11/23 Python
TensorFlow Autodiff自动微分详解
2020/07/06 Python
canvas粒子动画背景的实现示例
2018/09/03 HTML / CSS
英国排名第一的在线宠物用品商店:Monster Pet Supplies
2018/05/20 全球购物
转预备党员政审材料
2014/02/06 职场文书
运动会闭幕式解说词
2014/02/21 职场文书
应用数学专业求职信
2014/03/14 职场文书
儿童生日会策划方案
2014/05/15 职场文书
安全生产一岗双责责任书
2014/07/28 职场文书
工作检讨书500字
2014/10/19 职场文书
党的群众路线教育实践活动个人对照检查材料(教师)
2014/11/04 职场文书
读《皮囊》有感:理解是对他人的最大的善举
2019/11/14 职场文书
使用logback实现按自己的需求打印日志到自定义的文件里
2021/08/30 Java/Android