Python中pymysql模块的使⽤详解
pymysql 模块的使⽤
⼀、pymysql的下载和使⽤
(1)pymysql模块的下载
pip3 install pymysql
(2)pymysql的使⽤
# 实现:使⽤Python实现⽤户登录,如果⽤户存在则登录成功(假设该⽤户已在数据库中)
import pymysql
user = input('请输⼊⽤户名:')
pwd = input('请输⼊密码:')
# 1.连接
conn = t(host='127.0.0.1', port=3306, user='root', password='', db='db8', charset='utf8')
# 2.创建游标
cursor = conn.cursor()
#注意%s需要加引号
sql = "select * from userinfo where username='%s' and pwd='%s'" %(user, pwd)
print(sql)
# 3.执⾏sql语句
ute(sql) #执⾏sql语句,返回sql查询成功的记录数⽬
print(result)
# 关闭连接,游标和连接都要关闭
cursor.close()
conn.close()
if result:
print('登陆成功')
else:
print('登录失败')
⼆、execute()之sql注⼊
最后那⼀个空格,在⼀条sql语句中如果遇到select * from userinfo where username='mjj' -- asadasdas' and pwd='' 则--之后的条件被注释掉了(注意--后⾯还有⼀个空格)
#1、sql注⼊之:⽤户存在,绕过密码
mjj' -- 任意字符
#2、sql注⼊之:⽤户不存在,绕过⽤户与密码
xxx' or 1=1 -- 任意字符
解决⽅法:
# 原来是我们对sql进⾏字符串拼接
# sql="select * from userinfo where name='%s' and password='%s'" %(username,pwd)
# print(sql)
# ute(sql)
#改写为(execute帮我们做字符串拼接,我们⽆需且⼀定不能再为%s加引号了)
sql="select * from userinfo where name=%s and password=%s" #注意%s需要去掉引号,因为pymysql会⾃动为我们加上
ute(sql,[user,pwd]) #pymysql模块⾃动帮我们解决sql注⼊的问题,只要我们按照pymysql的规矩来。
三、增、删、改:connmit()
commit()⽅法:在数据库⾥增、删、改的时候,必须要进⾏提交,否则插⼊的数据不⽣效。
import pymysql
username = input('请输⼊⽤户名:')
pwd = input('请输⼊密码:')
# 1.连接
conn = t(host='localhost', port=3306, user='root', password='', db='db8', charset='utf8') # 2.创建游标
cursor = conn.cursor()
# 操作
# 增
# sql = "insert into userinfo(username,pwd) values (%s,%s)"
# effect_row = ute(sql,(username,pwd))
#同时插⼊多条数据
#utemany(sql,[('李四','110'),('王五','119')])
# print(effect_row)#
# 改
# sql = "update userinfo set username = %s where id = 2"
# effect_row = ute(sql,username)
# print(effect_row)
# 删
sql = "delete from userinfo where id = 2"
effect_row = ute(sql)
print(effect_row)
#⼀定记得commit
connmit()
# 4.关闭游标
cursor.close()
# 5.关闭连接
conn.close()
四、查:fetchone、fetchmany、fetchall
fetchone():获取下⼀⾏数据,第⼀次为⾸⾏;
fetchall():获取所有⾏数据源
fetchmany(4):获取4⾏数据
查看⼀下表内容:
mysql> select * from userinfo;
+----+----------+-----+
| id | username | pwd |
+----+----------+-----+
| 1 | mjj | 123 |
| 3 | 张三 | 110 |
| 4 | 李四 | 119 |
+----+----------+-----+
3 rows in set (0.00 sec)
使⽤fetchone():
import pymysql
# 1.连接
conn = t(host='localhost', port=3306, user='root', password='', db='db8', charset='utf8') # 2.创建游标
cursor = conn.cursor()
sql = 'select * from userinfo'
# 查询第⼀⾏的数据
row = cursor.fetchone()
print(row) # (1, 'mjj', '123')
# 查询第⼆⾏数据
row = cursor.fetchone()
print(row) # (3, '张三', '110')
# 4.关闭游标
cursor.close()
# 5.关闭连接
conn.close()
使⽤fetchall():
import pymysql
# 1.连接
conn = t(host='localhost', port=3306, user='root', password='', db='db8', charset='utf8')
# 2.创建游标
cursor = conn.cursor()
sql = 'select * from userinfo'
# 获取所有的数据
rows = cursor.fetchall()
print(rows)
# 4.关闭游标
cursor.close()
# 5.关闭连接
conn.close()
#运⾏结果
((1, 'mjj', '123'), (3, '张三', '110'), (4, '李四', '119'))
默认情况下,我们获取到的返回值是元组,只能看到每⾏的数据,却不知道每⼀列代表的是什么,这个时候可以使⽤以下⽅式来返回字典,每⼀⾏的数据都会⽣成⼀个字典:
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) #在实例化的时候,将属性cursor设置为
pymysql.cursors.DictCursor
在fetchone⽰例中,在获取⾏数据的时候,可以理解开始的时候,有⼀个⾏指针指着第⼀⾏的上⽅,获取⼀⾏,它就向下移动⼀⾏,所以当⾏指针到最后⼀⾏的时候,就不能再获取到⾏的内容,所以我们可以使⽤如下⽅法来移动⾏指针:
cursor.scroll(1,mode='relative') # 相对当前位置移动
cursor.scroll(2,mode='absolute') # 相对绝对位置移动
第⼀个值为移动的⾏数,整数为向下移动,负数为向上移动,mode指定了是相对当前位置移动,还是相对于⾸⾏移动
# 1.Python实现⽤户登录
# 2.Mysql保存数据
import pymysql
# 1.连接
conn = t(host='localhost', port=3306, user='root', password='', db='db8', charset='utf8')
# 2.创建游标
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
sql = 'select * from userinfo'
mysql下载完如何使用
# 查询第⼀⾏的数据
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)
# 4.关闭游标
cursor.close()
# 5.关闭连接
conn.close()
#结果如下
{'id': 1, 'username': 'mjj', 'pwd': '123'}
{'id': 3, 'username': '张三', 'pwd': '110'}
{'id': 3, 'username': '张三', 'pwd': '110'}
{'id': 1, 'username': 'mjj', 'pwd': '123'}
fetchmany():
import pymysql
# 1.连接
conn = t(host='localhost', port=3306, user='root', password='', db='db8', charset='utf8')
# 2.创建游标
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
sql = 'select * from userinfo'
# 获取2条数据
rows = cursor.fetchmany(2)
print(rows)
# 4.关闭游标
# rows = cursor.fetchall()
# print(rows)
cursor.close()
# 5.关闭连接
conn.close()
#结果如下:
[{'id': 1, 'username': 'mjj', 'pwd': '123'}, {'id': 3, 'username': '张三', 'pwd': '110'}]
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论