使用 Python 连接 MySQL 数据库并避免 SQL 注入风险的核心在于使用成熟的驱动库如 PyMySQL 或 mysql-connector-python,并严格采用参数化查询。首先安装相应库,通过 connect 函数建立连接,获取游标对象。在执行 SQL 语句时,切勿使用字符串格式化拼接用户输入,而应使用占位符(如 %s)配合 execute 方法的参数元组传递数据。这样数据库驱动会自动处理转义,将数据与指令分离,从根本上杜绝 SQL 注入漏洞,同时记得操作完成后提交事务并关闭连接释放资源。
Python 进阶——防止 SQL 注入多参数
Python 进阶——防止 SQL 注入多参数\n预防 SQL 注入,要使用 pymysql 参数化语句。pymysql 的 execute 支持参数化 sql,通过占位符 %s 配合参数就可以实现 sql 注入问题的避免。这样参数化的方式,让 mysql 通过预处理的方式避免了 sql 注入的存在。需要注意的是,不要因为参数是其他类型而换掉 %s,pymysql 的占位符并不是 python 的通用占位符。同时,也不要因为参数是 string 就在 %s 两边加引号,mysql 会自动去处理。防止多个参数要使用%s,%s,%s 来实现 代码实现 代码语言:javascript AI 代码解释 # 1.导包 import pymysql if__name__ =='__main__': # 2.创建连接对象 # connect =Connection =Connect 本质上是一个函数,使用这三个里面的任何一个函数都可以创建一个连接对象 # 1.host:服务器的主机地址 # 2.port:mysql 数据库的端口号 # 3.user: 用户名 # 4.password:密码 # 5.database:操作的数据库 # 6.charset:操作数据库使用的编码格式 conn =pymysql.connect(host="localhost",port=3306,user="root",password="mysql123456",database="python",charset="utf8")# 3.获取游标,目的就是要执行 sql 语句 cursor =conn.cursor()# 准备 sql,使用防止 sql 注入的 sql 语句,%s 是 sql 语句的参数和字符串里面的%s 不一样,不要加上引号 sql ="insert into students(name, age, gender, c_id) values(%s, %s, %s, %s)"print(sql)try:# 4.执行 sql 语句 # 1.sql # 2.执行 sql 语句的传入的参数,参数类型可以是元组,列表,字典 cursor.execute(sql,["司马懿",76,'男',3]);conn.commit()except Exception ase:conn.rollback()finally:# 5.关闭游标 cursor.close()# 6.关闭连接 conn.close()(来自 2026 年 4 月 11 日的资料)
如何使用 Python 连接 MySQL 数据库?
如何使用 Python 连接 MySQL 数据库?\n1. 使用 mysql-connector-python 连接 MySQL 数据库 mysql-connector-python 是 MySQL 官方提供的 Python 连接器,支持 Python 3.x 版本。安装 首先,你需要安装 mysql-connector-python 库:pip install mysql-connector-python AI 写代码 1 连接数据库 下面是一个简单的示例,展示如何连接到 MySQL 数据库:import mysql.connector # 创建数据库连接 mydb = mysql.connector.connect( host="localhost", user="yourusername", password="yourpassword", database="yourdatabase" ) # 创建游标对象 mycursor = mydb.cursor() # 执行 SQL 查询 mycursor.execute("SELECT * FROM yourtable") # 获取查询结果 myresult = mycursor.fetchall() for x in myresult: print(x) AI 写代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 注意事项 错误处理:在实际开发中,应该添加错误处理机制,以防止数据库连接失败或其他异常情况。try: mydb = mysql.connector.connect( host="localhost", user="yourusername", password="yourpassword", database="yourdatabase" ) except mysql.connector.Error as err: print(f"Error: {err}") 关闭连接:在完成数据库操作后,应该关闭游标和数据库连接,以释放资源。mycursor.close() mydb.close() 2. 使用 PyMySQL 连接 MySQL 数据库 PyMySQL 是一个纯 Python 实现的 MySQL 客户端库,兼容 Python 2.x 和 3.x 版本。安装 首先,你需要安装 PyMySQL 库:pip install PyMySQL AI 写代码 1 连接数据库 下面是一个简单的示例,展示如何连接到 MySQL 数据库:import pymysql # 创建数据库连接 mydb = pymysql.connect( host="localhost", user="yourusername", password="yourpassword", database="yourdatabase" ) # 创建游标对象 mycursor = mydb.cursor() # 执行 SQL 查询 mycursor.execute("SELECT * FROM yourtable") # 获取查询结果 myresult = mycursor.fet(2026 年 3 月 13 日)
MySQL 连接实战:用 pymysql 实现安全的数据 CRUD 操作 (防 SQL 注入指南)
MySQL 连接实战:用 pymysql 实现安全的数据 CRUD 操作 (防 SQL 注入指南)\n最近在重构一个用户管理系统时,我遇到了一个棘手的问题:系统上线后不久,安全团队就发来了告警,日志中出现了大量可疑的 SQL 查询尝试。虽然最终没有造成数据泄露,但这个事件让我深刻意识到,很多开发者在使用 Python 操作 MySQL 时,对 SQL 注入的防范意识还远远不够。pymysql 作为 Python 连接 MySQL 的主流库,其使用方式直接关系到整个应用的安全性。今天我想分享的不仅仅是“如何连接数据库”,而是如何构建一个既安全又高效的数据库操作层。特别是在处理用户注册、订单更新、支付记录等敏感业务场景时,一个疏忽就可能导致灾难性后果。我会从最基础的连接配置讲起,逐步深入到参数化查询、事务处理、连接池优化等实战技巧,并重点剖析那些容易被忽视的安全陷阱。1. 环境准备与基础连接 在开始编写任何数据库代码之前,我们需要确保开发环境配置正确。很多初学者在这一步就会遇到各种问题,比如版本不兼容、依赖缺失等。让我先带你搭建一个稳定的开发环境。1.1 安装与配置 pymysql pymysql 的安装看似简单,但选择合适的版本很重要。我建议使用最新稳定版,同时考虑与你的 Python 版本和 MySQL 版本的兼容性。# 使用 pip 安装最新稳定版 pip install pymysql # 如果需要指定版本 (比如项目有特定要求) pip install pymysql==1.1.0 #在 requirements.txt 中记录依赖 # pymysql==1.1.0 bash 注意:如果你的项目使用虚拟环境 (强烈推荐),请确保在正确的环境中安装。在 PyCharm 中,可以通过 File → Settings → Project → Python Interpreter 来管理包。安装完成后,我们可以通过一个简单的测试脚本来验证安装是否成功:import pymysql # 检查 pymysql 版本 print(f"pymysql 版本:{pymysql.__version__}") # 尝试导入所有必要的模块 try: from pymysql import connect, cursors, err print("所有必要模块导入成功") except ImportError as e: print(f"导入失败:{e}")(资料日期为 2026 年 3 月 6 日)
MySQL Python 连接与使用
MySQL Python 连接与使用\n将 Python 与 MySQL 结合使用,可以让我们轻松地开发数据库驱动的应用程序。本文将详细介绍如何使用 Python 连接和操作 MySQL 数据库,内容包含如下:如何安装 MySQL Python 驱动 建立和关闭数据库连接 执行各种 SQL 查询 事务管理和错误处理 数据库操作的最佳实践 准备工作 安装必要的软件 在开始之前,请确保你已经安装了以下软件:Python(推荐 3.6 或更高版本) MySQL Server(社区版即可) MySQL Connector/Python(Python 的 MySQL 驱动) 安装 MySQL Connector/Python 可以通过 pip 安装 MySQL 官方提供的 Python 驱动:pip install mysql-connector-python 或者安装 PyMySQL (另一个流行的 MySQL Python 驱动): pip install pymysql 连接 MySQL 数据库 建立基本连接 以下是使用 mysql-connector-python 建立数据库连接的基本代码:实例 import mysql.connector # 创建数据库连接 db=mysql.connector.connect( host="localhost", user="yourusername", password="yourpassword", database="yourdatabase" ) print("数据库连接成功!") 连接参数说明 host: MySQL 服务器地址 (本地为 "localhost") user: 数据库用户名 password: 用户密码 database: 要连接的数据库名称 (可选) 使用 PyMySQL 连接 如果你选择使用 PyMySQL,连接方式略有不同:实例 import pymysql # 创建数据库连接 db=pymysql.connect( host="localhost", user="yourusername", password="yourpassword", database="yourdatabase" ) print("数据库连接成功!") 执行 SQL 查询 创建游标对象 在执行 SQL 语句前,我们需要创建一个游标 (cursor) 对象:实例 cursor=db.cursor() 执行 SELECT 查询 实例 cursor.execute("SELECT * FROM your_table") # 获取所有结果 results=cursor.fetchall() for row in results: print(row) 执行 INSERT, UPDATE, DELETE 操作(搜索结果收录于 2026 年 4 月 21 日)
Python 自学 24 - Python 接入 MySQL 数据库
Python 自学 24 - Python 接入 MySQL 数据库\n本篇将进入一个非常实用的主题:如何用 Python 连接并操作 MySQL 数据库。这在实际开发中非常常见,无论是做数据存储、日志分析还是后台服务,都离不开数据库。准备工作 在开始之前,需要确保以下环境准备就绪:已安装 MySQL 数据库 (本地或远程均可) 已创建一个测试数据库 (例如 test_db) Python 环境中安装了 MySQL 驱动库 常见的 Python-MySQL 驱动有两个:mysql-connector-python(官方驱动) PyMySQL(轻量常用) 安装方式:代码语言:javascript AI 代码解释 连接 MySQL 数据库 以 mysql-connector-python 为例,连接数据库的基本代码如下:代码语言:javascript AI 代码解释 如果使用 PyMySQL,写法类似:代码语言:javascript AI 代码解释 执行 SQL 语句 1. 创建表 先在 test_db 数据库中创建 students 表,包含字段:id(主键自增)、name(姓名)、age(年龄)、gender(性别)。代码语言:javascript AI 代码解释 import pymysql from pymysql import Error def create_table():connection =None try:connection =pymysql.connect(host='localhost',user='root',password='123456',database='test_db',charset='utf8mb4')cursor =connection.cursor() # 定义创建表的 SQL 语句 (若表已存在则删除,避免重复创建) create_table_sql =""" DROP TABLE IF EXISTS students;CREATE TABLE students(id INT AUTO_INCREMENT PRIMARY KEY,# 主键自增 name VARCHAR(50)NOT NULL,# 姓名 (非空) age INT DEFAULT 0,# 年龄 (默认 0) gender ENUM('男','女','其他')# 性别 (枚举类型,只能选指定值) )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;""" # 执行 SQL 语句 (多行 SQL 需用 execute 执行,无需分次) cursor.execute(create_table_sql)print("学生表 (students) 创建成功!") except Error as e:print(f"创建表失败!错误:{e}")finally:if connection and connection.is_connected():cursor.close()connection.close() if__name__ =="__main__":create_table() 验证:登录 MySQL,执行 use test_db;和 show tables;,若能看到 students 表,则创建成功。2. 插入数据 插入数据分“单条插入”和“批量插入”,批量插入效率更高 (减少网络交互次数)。单条插入:代码语言:javascript AI 代码解释 def insert_single_data():connection =None try:connection =pymysql.connect(host='localhost',user='root',password='123456',database='test_db',charset='utf8mb4')cursor =connection.cursor() # 插入 SQL(%s 为占(发布时间是 2026 年 4 月 11 日)
FAQ
为什么参数化查询能防止 SQL 注入?
参数化查询将 SQL 指令与数据分开处理,数据库会预编译语句结构,用户输入仅被视为数据值而非可执行代码,从而避免恶意输入改变原 SQL 逻辑。
PyMySQL 和 mysql-connector-python 该如何选择?
mysql-connector-python 是 MySQL 官方驱动,稳定性高;PyMySQL 是纯 Python 实现,安装更轻量且兼容性好。两者都支持参数化查询,可根据项目需求选择。
连接数据库后忘记关闭连接会有什么后果?
会导致数据库连接资源泄露,可能耗尽数据库最大连接数,影响系统性能甚至导致服务不可用,因此务必在 finally 块中关闭游标和连接。