Python使用pymysql模块操作mysql增删改查实例分析
时间:2019-12-22来源:系统城作者:电脑系统城
本文实例讲述了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数学运算技巧总结》、《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