Python操作MySQL:pymysql模块增删改查实战解析
39 浏览量
更新于2024-08-31
收藏 66KB PDF 举报
"pymysql模块的使用(增删改查)详解"
在Python中与MySQL数据库进行交互时,pymysql模块是一个常用的库,它允许我们编写Python代码来执行SQL命令,实现数据的增删改查操作。下面将详细介绍pymysql的下载、使用以及在执行SQL时需要注意的SQL注入问题。
一、pymysql的下载和使用
1. 安装pymysql
使用Python的包管理工具pip进行安装,命令如下:
```
pip3 install pymysql
```
2. 使用pymysql连接数据库
要使用pymysql连接MySQL数据库,首先需要配置连接参数,包括主机名(host)、端口号(port)、用户名(user)、密码(password)、数据库名(db)和字符集(charset)。以下是一个连接示例:
```python
import pymysql
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='', db='db8', charset='utf8')
```
3. 创建游标
连接数据库后,需要创建游标对象,游标用于执行SQL语句和获取结果:
```python
cursor = conn.cursor()
```
4. 执行SQL语句
使用游标对象的`execute()`方法执行SQL语句。例如,查询username为'mjj'且pwd为'123456'的用户信息:
```python
sql = "SELECT * FROM user_info WHERE username='mjj' AND pwd='123456'"
cursor.execute(sql)
```
5. 获取查询结果
执行`execute()`方法后,可以调用`fetchone()`、`fetchall()`等方法获取查询结果。
6. 关闭游标和连接
完成操作后,记得关闭游标和连接以释放资源:
```python
cursor.close()
conn.close()
```
二、SQL注入及其防范
在使用字符串拼接构造SQL语句时,如果不小心,可能会导致SQL注入攻击。攻击者可以通过输入特定的数据,使SQL语句的逻辑发生变化,从而获取非授权的信息或执行恶意操作。
1. SQL注入实例
- 用户存在,绕过密码:
`mjj'-- 任意字符`
这里的`--`使得后面的条件被注释掉,即使没有正确的密码也能通过验证。
- 用户不存在,绕过用户与密码:
`xxx'or1=1-- 任意字符`
这将导致SQL语句的条件总是为真,不需要验证用户名和密码。
2. 解决SQL注入的方法
为了避免SQL注入,应使用参数化查询或预编译语句。在pymysql中,我们可以使用占位符`%s`配合元组传入参数,这样可以确保输入数据被正确地转义:
```python
# 避免SQL注入的例子
username = 'mjj'
password = '123456'
sql = "SELECT * FROM user_info WHERE username=%s AND pwd=%s"
cursor.execute(sql, (username, password))
```
总结,pymysql模块为Python提供了方便的MySQL数据库操作接口,通过建立连接、创建游标、执行SQL和处理结果,可以轻松地实现数据的增删改查。同时,为了防止SQL注入,应避免直接字符串拼接SQL语句,而是使用参数化查询。
2020-09-08 上传
2018-09-29 上传
2020-09-08 上传
2020-09-09 上传
2020-09-09 上传
2020-09-09 上传
2020-12-16 上传
2020-09-08 上传
2024-10-22 上传
weixin_38582909
- 粉丝: 5
- 资源: 974
最新资源
- DEV小教程 有兴趣的可以看看
- 跟我一起写makefile
- 09系统结构师考试大纲
- 详细错误提示
- 对于基本的程序员来说有用的单元测试对于基本的程序员来说有用的单元测试
- 数字电路课程设计之数字闹钟课程设计
- 对于基本的程序员来说有用的单元测试
- 数字电路课程设计(电子数字计时器的设计).
- OA办公自动化系统 毕业设计 论文 文档.doc
- 数字电路课程设计之交通灯设计
- 谭浩强C语言part-1
- LiferayPortal数据库介绍
- cc2430英文技术手册
- FLASH四宝贝之-使用ActionScript.3.0组件
- H3C S7500系列核心交换命令手册
- ICE_3.1_Data_Loading.pdf