预防SQL注入,要使用pymysql 参数化语句。pymysql 的 execute 支持参数化 sql,通过占位符 %s 配合参数就可以实现 sql 注入问题的避免。
这样参数化的方式,让 mysql 通过预处理的方式避免了 sql 注入的存在。
需要注意的是,不要因为参数是其他类型而换掉 %s,pymysql 的占位符并不是 python 的通用占位符。
同时,也不要因为参数是 string 就在 %s 两边加引号,mysql 会自动去处理。
# 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 = "select * from students where name = %s;"
print(sql)
# 4. 执行sql语句
cursor.execute(sql,("黄蓉",))
# 获取查询的结果, 返回的数据类型是一个元组
# row = cursor.fetchone()
# print(row)
# 返回的数据类型是一个元组,其中元组里面的每条数据还是元组
result = cursor.fetchall()
for row in result:
print(row)
# 5. 关闭游标
cursor.close()
# 6. 关闭连接
conn.close()
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。