在Python中使用pymysql
查询数据库时,为了防止SQL注入攻击,推荐使用参数化查询(即占位符)。这样可以确保用户输入的数据会被正确清理和处理,而不会直接插入到SQL语句中。
下面是一个使用pymysql
进行安全查询的示例,展示了如何使用参数化查询:
import pymysql
# 数据库连接配置
connection = pymysql.connect(
host='localhost',
user='your_username',
password='your_password',
database='your_database'
)
try:
# 创建游标
with connection.cursor() as cursor:
# 使用占位符进行参数化查询
sql = "SELECT * FROM your_table WHERE username = %s"
username_input = input("请输入用户名: ") # 用户输入,可能存在注入风险
# 执行查询,传递参数
cursor.execute(sql, (username_input,))
# 获取查询结果
results = cursor.fetchall()
for row in results:
print(row)
finally:
# 关闭数据库连接
connection.close()
在这个例子中:
- SQL查询中的
%s
是一个占位符,代表将在后面提供的值,确保不会被直接插入SQL命令中。 cursor.execute(sql, (username_input,))
里的第二个参数是一个元组,包含要替换占位符的值。这样做会自动处理转义,避免注入攻击。
使用参数化查询是防止SQL注入的有效方法,始终建议将用户输入与SQL代码分开。