系统城装机大师 - 固镇县祥瑞电脑科技销售部宣传站!

当前位置:首页 > 数据库 > Mysql > 详细页面

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

时间:2019-12-22来源:系统城作者:电脑系统城

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


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

下面是执行过程

请输入用户名: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采用列表的方式


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

2采用字典的方法


 
  1. # -*- coding:utf-8 -*-
  2. import pymysql
  3. user = input('请输入用户名').strip()
  4. pwd = input('请输入密码').strip()
  5. # 连接服务端
  6. conn = pymysql.connect(
  7. host='127.0.0.1',
  8. user='root',
  9. password="123",
  10. database='t1',
  11. port=3306,
  12. charset='utf8'
  13. )
  14. # -- ddadad
  15. # 创建游标对象
  16. cur = conn.cursor()
  17. sql = "select * from userinfo where username = %(name)s and pwd = %(password)s"
  18. print(sql)
  19. # resultNum = cur.execute(sql,[user,pwd])
  20. resultNum = cur.execute(sql,{"name":user,"password":pwd})
  21. print(resultNum)
  22. cur.close()
  23. conn.close()
  24. if resultNum:
  25. print('登陆成功')
  26. else:
  27. print('登陆失败')
  28.  

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

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

基本框架


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

增--》一组数据


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

增---》多组数据


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


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


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

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

四、查:fetchone、fetchmany、fetchall

表的内容


 
  1. mysql> select * from userinfo;
  2. +----+----------+-----+
  3. | id | username | pwd |
  4. +----+----------+-----+
  5. | 1 | mjj | 123 |
  6. | 3 | 张三 | 110 |
  7. | 4 | 李四 | 119 |
  8. +----+----------+-----+
  9. 3 rows in set (0.00 sec)
  10.  

固定格式


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

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


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

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


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

fetchmany:获取指定的条数数据


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

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


 
  1. cursor.scroll(1,mode='relative') # 相对当前位置移动
  2. cursor.scroll(2,mode='absolute') # 相对绝对位置移动
  3.  

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

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python常见数据库操作技巧汇总》、《Python数学运算技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

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

分享到:

相关信息

  • MySQL的核心查询语句详解

    一、单表查询 1、排序 2、聚合函数 3、分组 4、limit 二、SQL约束 1、主键约束 2、非空约束 3、唯一约束 4、外键约束 5、默认值 三、多表查询 1、内连接 1)隐式内连接: 2)显式内连接: 2、外连接 1)左外连接 2)右外连接 四...

    2023-10-30

  • Mysql中如何删除表重复数据

    Mysql删除表重复数据 表里存在唯一主键 没有主键时删除重复数据 Mysql删除表中重复数据并保留一条 准备一张表 用的是mysql8 大家自行更改 创建表并添加四条相同的数据...

    2023-10-30

系统教程栏目

栏目热门教程

人气教程排行

站长推荐

热门系统下载