📜  python sql passer des parametres dans une requet pymysql (1)

📅  最后修改于: 2023-12-03 15:04:08.737000             🧑  作者: Mango

Python 通过 PyMySQL 使用参数化查询语句

介绍

在使用 Python 连接 MySQL 数据库的过程中,使用参数化查询语句是十分常见的。参数化查询语句可以防止 SQL 注入攻击和数据类型转换错误。本文将介绍如何使用 PyMySQL 库来实现参数化查询语句。

PyMySQL

PyMySQL 是 Python3 中连接 MySQL 数据库的库,与 Python 标准库中的 MySQLdb 库不同,PyMySQL 安装简单,并且与多个 Python 版本兼容。如果你还没有安装 PyMySQL,可以通过以下命令进行安装:

!pip install PyMySQL 
参数化查询语句

使用执行 SQL 语句时,将变量传递给 SQL 语句需要非常谨慎。在传递 SQL 参数时,执行 SQL 语句时,这些参数需要正确处理,因为 SQL 参数可能包含特殊字符,这些特殊字符可能会干扰 SQL 查询,导致无法正常查询,甚至出现 SQL 注入攻击的情况。以下是使用参数化查询语句的正确方式,可以保证 SQL 查询安全性:

import pymysql

# 连接数据库
conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='', db='test', charset='utf8')

# 创建 cursor 对象
cursor = conn.cursor()

# 执行查询
sql = "SELECT * FROM user WHERE name=%s AND age=%s"
cursor.execute(sql, ("Tom", 18))

# 获取结果
result = cursor.fetchall()

# 关闭连接
cursor.close()
conn.close()

在执行查询 SELECT * FROM user WHERE name='Tom' AND age=18 时,使用 %s 作为占位符,变量值以元组形式传递给 execute 方法,可以确保查询安全性。在该示例中,第一个参数 name='Tom'%s 匹配,第二个参数 age=18%s 匹配。

总结

在任何需要执行 SQL 查询的应用程序中,参数化查询语句都是必不可少的。除了导致安全问题之外,数据类型转换错误可能会导致查询失败。使用 PyMySQL 库轻松执行参数化查询语句,可以大幅提高 SQL 查询的安全性,保证查询结果的准确性。