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 sqlobject(mysql)中文乱码解决方法
Nov 14 Python
python使用win32com在百度空间插入html元素示例
Feb 20 Python
Python的math模块中的常用数学函数整理
Feb 04 Python
Python 多线程抓取图片效率对比
Feb 27 Python
使用python实现ANN
Dec 20 Python
浅谈Python实现2种文件复制的方法
Jan 19 Python
PYTHON发送邮件YAGMAIL的简单实现解析
Oct 28 Python
python实现布隆过滤器及原理解析
Dec 08 Python
python中return不返回值的问题解析
Jul 22 Python
python中温度单位转换的实例方法
Dec 27 Python
Jupyter Notebook添加代码自动补全功能的实现
Jan 07 Python
Python爬取某平台短视频的方法
Feb 08 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
PHP4与PHP5的时间格式问题
2008/02/17 PHP
PHP 程序员也要学会使用“异常”
2009/06/16 PHP
php class中public,private,protected的区别以及实例分析
2013/06/18 PHP
php面向对象中的魔术方法中文说明
2014/03/04 PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
2014/07/22 PHP
destoon切换城市后实现logo旁边显示地区名称的方法
2014/08/21 PHP
PHP实现CSV文件的导入和导出类
2015/03/24 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
PHP实现提取多维数组指定一列的方法总结
2019/12/04 PHP
JavaScript中各种编码解码函数的区别和注意事项
2010/08/19 Javascript
JS维吉尼亚密码算法实现代码
2010/11/09 Javascript
jQuery实现设置、移除文本框默认值功能
2015/01/13 Javascript
thinkphp 表名 大小写 窍门
2015/02/01 Javascript
AngularJS 如何在控制台进行错误调试
2016/06/07 Javascript
详解Vue方法与事件
2017/03/09 Javascript
使用Vue-cli 3.0搭建Vue项目的方法
2018/06/07 Javascript
Vue2.x中利用@font-size引入字体图标报错的解决方法
2018/09/28 Javascript
javascript面向对象三大特征之继承实例详解
2019/07/24 Javascript
Vue.js实现tab切换效果
2019/07/24 Javascript
vue.js 实现a标签href里添加参数
2019/11/12 Javascript
js Math数学简单使用操作示例
2020/03/13 Javascript
Vue Render函数原理及代码实例解析
2020/07/30 Javascript
js数组的基本使用总结
2021/01/18 Javascript
python实现从文件中读取数据并绘制成 x y 轴图形的方法
2018/10/14 Python
numpy按列连接两个维数不同的数组方式
2019/12/06 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
Ellos瑞典官网:北欧地区时尚、美容和住宅领域领先的电子商务网站
2019/11/21 全球购物
英国鲜花递送:Blossoming Gifts
2020/07/10 全球购物
关爱残疾人演讲稿
2014/05/24 职场文书
品质口号大全
2014/06/17 职场文书
销售团队获奖感言
2014/08/14 职场文书
公司领导班子民主生活会对照检查材料
2014/10/02 职场文书
2014预防青少年违法犯罪工作总结
2014/12/10 职场文书
校园音乐节目广播稿
2015/08/19 职场文书
详解MySQL InnoDB存储引擎的内存管理
2021/04/08 MySQL
Python 实现定积分与二重定积分的操作
2021/05/26 Python