前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python进阶——防止SQL注入多参数

Python进阶——防止SQL注入多参数

原创
作者头像
落雨
发布2022-03-17 08:51:39
30.3K0
发布2022-03-17 08:51:39
举报
文章被收录于专栏:落雨的专栏落雨的专栏

概述

预防SQL注入,要使用pymysql 参数化语句。pymysql 的 execute 支持参数化 sql,通过占位符 %s 配合参数就可以实现 sql 注入问题的避免。

这样参数化的方式,让 mysql 通过预处理的方式避免了 sql 注入的存在。

需要注意的是,不要因为参数是其他类型而换掉 %s,pymysql 的占位符并不是 python 的通用占位符。

同时,也不要因为参数是 string 就在 %s 两边加引号,mysql 会自动去处理。

防止多个参数要使用%s,%s,%s来实现

代码实现

代码语言:javascript
复制
# 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 as e:
        conn.rollback()

    finally:
        # 5. 关闭游标
        cursor.close()
        # 6. 关闭连接
        conn.close()

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 代码实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档