Python 与 MySQL 进行增删改查的操作以及防止SQL注入

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Python 与 MySQL 进行增删改查的操作以及防止SQL注入

Python 与 MySQL 进行增删改查的操作以及防止SQL注入

在 Python 中使用 MySQL 数据库操作非常方便,通过 PyMySQL 这个第三方库,我们可以轻松地实现 MySQL 数据库的连接、查询、添加、修改和删除等操作。下面通过一个简单的示例来演示如何实现 MySQL 数据库的基本操作。

  • 准备工作

在进行实验前,需要先安装 PyMySQL 库,可以通过以下命令进行安装:

pip install pymysql

我们还需要在 MySQL 中创建一个数据库和一张表,假设我们创建的数据库名为 testdb,表名为 users,包含以下两个字段:

id INT(11) PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
age INT(3) NOT NULL
  • 连接数据库

首先,我们需要建立与 MySQL 数据库的连接。可以通过以下代码实现:

import pymysql
# 建立数据库连接
conn = pymysql.connect(
    host='localhost',  # 连接的数据库服务器地址
    user='root',  # 连接的数据库用户名
    password='123456',  # 连接的数据库密码
    db='testdb',  # 连接的数据库名称
    charset='utf8mb4',  # 设定字符集
    cursorclass=pymysql.cursors.DictCursor  # 以字典类型返回查询结果
)
  • 插入数据

接下来,我们可以通过以下代码向 users 表中插入一条数据:

# 获取一个游标对象
cursor = conn.cursor()
# 插入一行数据
sql = "INSERT INTO users (name, age) VALUES (%s, %s)"
cursor.execute(sql, ('张三', 25))
# 提交事务
conn.commit()
# 关闭游标和数据库连接
cursor.close()
conn.close()

在这段代码中,%s 是使用占位符的方式,可以有效地避免 SQL 注入问题。

  • 查询数据

接下来,我们可以通过以下代码查询 users 表中的所有数据,然后将查询结果打印出来:

# 获取游标对象
cursor = conn.cursor()
# 执行查询操作
sql = "SELECT * FROM users"
cursor.execute(sql)
# 获取查询结果
result = cursor.fetchall()
# 输出查询结果
for row in result:
    print(row)
# 关闭游标和数据库连接
cursor.close()
conn.close()
  • 更新数据

接下来,我们可以通过以下代码将 users 表中 id 为 1 的数据的 age 字段更新为 30:

# 获取游标对象
cursor = conn.cursor()
# 更新一行数据
sql = "UPDATE users SET age = %s WHERE id = %s"
cursor.execute(sql, (30, 1))
# 提交事务
conn.commit()
# 关闭游标和数据库连接
cursor.close()
conn.close()
  • 删除数据

最后,我们可以通过以下代码删除 users 表中 id 为 1 的数据:

# 获取游标对象
cursor = conn.cursor()
# 删除一行数据
sql = "DELETE FROM users WHERE id = %s"
cursor.execute(sql, 1)
# 提交事务
conn.commit()
# 关闭游标和数据库连接
cursor.close()
conn.close()

以上就是 Python 与 MySQL 数据库进行增删改查的基本操作,通过这些简单的示例,你可以快速入门 PyMySQL 库的使用。

防止 SQL 注入

SQL 注入是一种常见的网络攻击方式,它的原理是通过将恶意 SQL 代码注入到应用程序中,从而获取数据库中的敏感信息。在开发 Python 应用程序时,为了确保程序的安全性,我们需要采取一些措施来防止 SQL 注入的发生。

  • 使用占位符

使用占位符是一种有效的防止 SQL 注入的方式。在使用 SQL 语句时,我们可以通过占位符的方式传递参数,从而避免 SQL 注入的风险。以下代码就是一个使用占位符的示例:

# 获取游标对象
cursor = conn.cursor()
# 插入一行数据
sql = "INSERT INTO users (name, age) VALUES (%s, %s)"
cursor.execute(sql, ('张三', 25))
# 提交事务
conn.commit()
# 关闭游标和数据库连接
cursor.close()
conn.close()

在这段代码中,%s 就是占位符,它可以将传递的参数进行处理,从而避免 SQL 注入的风险。

  • 使用参数化查询

参数化查询是另一种有效的防止 SQL 注入的方式。在使用参数化查询时,我们可以将 SQL 语句与参数分离开来,从而避免恶意代码的注入。以下代码就是一个使用参数化查询的示例:

# 获取游标对象
cursor = conn.cursor()
# 执行查询操作
sql = "SELECT * FROM users WHERE name = %s"
cursor.execute(sql, ('张三',))
# 获取查询结果
result = cursor.fetchall()
# 输出查询结果
for row in result:
    print(row)
# 关闭游标和数据库连接
cursor.close()
conn.close()

在这段代码中,%s 作为参数传递给 cursor.execute() 函数,而不是直接包含在 SQL 语句中,从而避免了 SQL 注入的风险。

  • 过滤输入内容

在编写 Python 程序时,我们应该对用户输入的内容进行过滤和验证,确保输入的内容符合预期。在处理 SQL 语句时,我们应该过滤掉一些特殊字符,如单引号、双引号、分号等,从而减少 SQL 注入的风险。

  • 总结

以上就是在 Python 中防止 SQL 注入的方式,通过使用占位符、参数化查询和过滤输入内容等方法,我们可以有效地保护 Python 应用程序的安全性,避免 SQL 注入的发生。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
11天前
|
SQL 关系型数据库 MySQL
【MySQL】根据binlog日志获取回滚sql的一个开发思路
【MySQL】根据binlog日志获取回滚sql的一个开发思路
|
11天前
|
SQL 存储 关系型数据库
【MySQL核心】MySQL 数据恢复-ibd2sql
【MySQL核心】MySQL 数据恢复-ibd2sql
|
3天前
|
SQL 关系型数据库 MySQL
Python之MySQL操作及Paramiko模块操作
Python之MySQL操作及Paramiko模块操作
|
5天前
|
JavaScript 关系型数据库 MySQL
node连接mysql,并实现增删改查功能
【8月更文挑战第26天】node连接mysql,并实现增删改查功能
16 3
|
4天前
|
关系型数据库 MySQL 大数据
教你使用Python玩转MySQL数据库,大数据导入不再是难题!
教你使用Python玩转MySQL数据库,大数据导入不再是难题!
|
4天前
|
SQL 关系型数据库 MySQL
干货!python与MySQL数据库的交互实战
干货!python与MySQL数据库的交互实战
|
7天前
|
SQL 关系型数据库 MySQL
【MySQL 慢查询秘籍】慢SQL无处遁形!实战指南:一步步教你揪出数据库性能杀手!
【8月更文挑战第24天】本文以教程形式深入探讨了MySQL慢SQL查询的分析与优化方法。首先介绍了如何配置MySQL以记录执行时间过长的SQL语句。接着,利用内置工具`mysqlslowlog`及第三方工具`pt-query-digest`对慢查询日志进行了详细分析。通过一个具体示例展示了可能导致性能瓶颈的查询,并提出了相应的优化策略,包括添加索引、缩小查询范围、使用`EXPLAIN`分析执行计划等。掌握这些技巧对于提升MySQL数据库性能具有重要意义。
34 1
|
3天前
|
关系型数据库 MySQL 数据库
MySQL数据库的增删改查
MySQL数据库的增删改查
8 0
|
10天前
|
SQL 关系型数据库 MySQL
"Python与MySQL的浪漫邂逅:一键掌握增删改查,开启你的数据库编程之旅!"
【8月更文挑战第21天】Python因其简洁的语法和强大的库支持,成为连接数据库的首选工具。本文介绍如何使用Python连接MySQL数据库并执行基本操作。首先需安装`mysql-connector-python`库。通过配置连接信息建立数据库连接后,可利用`cursor.execute()`执行SQL语句进行数据的增删改查,并通过`commit()`提交更改。查询时使用`fetchall()`或`fetchone()`获取结果。记得处理异常及关闭连接以释放资源。掌握这些基础,有助于高效进行数据库编程。
23 0
|
9天前
|
SQL 关系型数据库 MySQL
【揭秘】MySQL binlog日志与GTID:如何让数据库备份恢复变得轻松简单?
【8月更文挑战第22天】MySQL的binlog日志记录数据变更,用于恢复、复制和点恢复;GTID为每笔事务分配唯一ID,简化复制和恢复流程。开启binlog和GTID后,可通过`mysqldump`进行逻辑备份,包含binlog位置信息,或用`xtrabackup`做物理备份。恢复时,使用`mysql`命令执行备份文件,或通过`innobackupex`恢复物理备份。GTID模式下的主从复制配置更简便。
47 2
下一篇
云函数