python操作mysql之pymysql
2022/1/29 2:05:28
本文主要是介绍python操作mysql之pymysql,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
python操作mysql之pymysql
准备工作:
下载固定模块: 方法一:命令下载 pip3 isntall pymysql 方法二:借助于pycharm
模块的基本使用
import pymysql # 导入模块 # 创建链接 conn = pymysql.connect( host='127.0.0.1', # 本地回环地址 port=3306, # mysql固定端口好3306 user='root', # 用户名 password='123', # 密码 database='db5', # 必须指定库 charset='utf8' # 注意这里不可以写utf-8 ) # 生成一个游标对象(相当于cmd下的打开mysql的命令界面 mysql> ) cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 括号内的命令是让数据自动组织成字典 # 定义sql语句 sql = 'select * from user' # 执行sql语句 cursor.execute(sql) # 获取返回结果 res = cursor.fetchall() print(res)
sql注入问题
在讲解什么是sql注入问题之前我们来看一个现象: # 使用数据库写一个简单的用户注册登录: import pymysql # 创建链接 conn = pymysql.connect( host='127.0.0.1', # 本地回环地址 port=3306, # mysql固定端口好3306 user='root', # 用户名 password='123', # 密码 database='db5', # 必须指定库 charset='utf8' # 注意这里不可以写utf-8 ) # 生成一个游标对象(相当于cmd下的打开mysql的命令界面 mysql> ) cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) username = input('用户名:').strip() password = input('密码:').strip() sql = "select * from user where user ='%s' and password='%s'"%(username,password) print(sql) cursor.execute(sql) res = cursor.fetchall() if res: print('登陆成功') else: print('用户名或密码错误')
验证是没有问题的,但是我们来看一个现象:
# 我们观察上述问题: 问题1 用户名正确 不需要密码也能登录 问题2 用户名和密码都不需要也能登录
这就是sql注入问题: SQL注入问题的产生: 就是通过一些特殊符号的组合 达到某些特定的效果从而避免常规的逻辑 SQL注入问题如何解决: execute方法自动帮你解决
演示execute方法:
import pymysql # 创建链接 conn = pymysql.connect( host='127.0.0.1', # 本地回环地址 port=3306, # mysql固定端口好3306 user='root', # 用户名 password='123', # 密码 database='db5', # 必须指定库 charset='utf8' # 注意这里不可以写utf-8 ) # 生成一个游标对象(相当于cmd下的打开mysql的命令界面 mysql> ) cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 获取用户名和密码 username = input('用户名:').strip() password = input('密码:').strip() # 构建sql语句 # sql = "select * from user where user ='%s' and password='%s'"%(username,password) sql = "select * from user where user =%s and password=%s" print(sql) cursor.execute(sql,(username,password)) # 使用execute res = cursor.fetchall() if res: print(res) print('登陆成功') else: print('用户名或密码错误')
这里就解决了sql注入的问题 只需要用到固定的方法execute即可
pymysql autocommit自动二次确认
autocommit二次确认:设计到增删改都需要二次确认 autocommit就解决了手动二次确认,在设计增删改查时默认二次确认的效果。 那么接下来我们来看一下为什么需要二次确认,二次确认到底时为了实现什么呢?
import pymysql # 创建链接 conn = pymysql.connect( host='127.0.0.1', # 本地回环地址 port=3306, # mysql固定端口好3306 user='root', # 用户名 password='123', # 密码 database='db5', # 必须指定库 charset='utf8' # 注意这里不可以写utf-8 ) # 生成一个游标对象 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让数据自动组织成字典 sql1 = 'select * from user' # 查看数据 sql2 = 'insert into user(user ,password) values(%s,%s)' # 插入数据 sql3 = 'update user set user =tom22 where id=2' # 修改数据 sql4 = 'delete from user where id=2' # 删除数据
1、查询数据结果:
cursor.execute(sql1) print(cursor.fetchall())
2、插入数据结果:
cursor.execute(sql2,('haha',123123)) # 插入数据就无需返回结果了
3、修改数据结果:
res = cursor.execute(sql3) # 执行sql3将tom改为tom22 # cursor的返回结果为影响了几行 print(res)
4、删除表数据
总结: # 1.查询语句可以正常执行并获取结果 # cursor.execute(sql1) # 2.插入语句能够执行 但是并没有影响表数据 # cursor.execute(sql2,('jackson',666)) # 3.更新语句能够执行 但是并没有影响表数据 # res = cursor.execute(sql3) # print(res) # 4.删除语句能够执行 但是并没有影响表数据 # res = cursor.execute(sql4) # print(res) 解释:在针对增删改查操作时他们的重要程度不一样(级别不一样) 查功能的级别是最低的,增删改都是要影响到数据信息的,pymysql规定必须需要一个二次确认才可生效。 怎么进行二次确认呢? 关键字:commit() 在执行增删改操作的下面 执行 conn.commit()命令进行二次确认 # 验证:
解决手动添加二次确认问题:
# 这样感觉每次执行增删改操作都要执行conn.commit()命令非常的麻烦. 这里就用到我们开头提到的自动二次确认 autocommit : 使用: 在创建pymysql添加: autocommit=True
补充 executemany():
定义: 在我们要插入很多数据的时候 就要使用到executemany() 使用: cursor.executemany(sql2,[('tom',111),('toom',222),('tooom',333)]) 验证:
补充:
主动关闭连接 释放资源(用在代码块最后): conn.close()
这篇关于python操作mysql之pymysql的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-15MySQL教程:初学者必备的MySQL数据库入门指南
- 2024-11-15MySQL教程:初学者必看的MySQL入门指南
- 2024-11-04部署MySQL集群项目实战:新手入门教程
- 2024-11-04如何部署MySQL集群资料:新手入门指南
- 2024-11-02MySQL集群项目实战:新手入门指南
- 2024-11-02初学者指南:部署MySQL集群资料
- 2024-11-01部署MySQL集群教程:新手入门指南
- 2024-11-01如何部署MySQL集群:新手入门教程