首页 > 数据库 > mysql教程 > 如何安全地将参数传递给 SQLAlchemy 的 `connection.execute` 方法?

如何安全地将参数传递给 SQLAlchemy 的 `connection.execute` 方法?

Mary-Kate Olsen
发布: 2025-01-04 08:11:39
原创
221 人浏览过

How to Securely Pass Parameters to SQLAlchemy's `connection.execute` Method?

在SQLAlchemy的connection.execute方法中传递参数

提供的代码片段使用connection.execute方法从SQL查询中检索数据并将结果转换为数组地图。然而,参数化目前是通过字符串格式化来处理的,这存在安全风险。

为了解决这个问题,可以使用 SQLAlchemy 的 text() 函数来生成参数化 SQL 查询。此函数采用 SQL 字符串作为参数,并允许在执行期间使用关键字参数来指定值。

以下是代码的更新版本:

def __sql_to_data(sql, values):
    result = []
    connection = engine.connect()
    try:
        # Convert SQL to parametrized SQL
        sql_text = sql.text(sql)
        rows = connection.execute(sql_text, values)

        for row in rows:
            result_row = {}
            for col in row.keys():
                result_row[str(col)] = str(row[col])
            result.append(result_row)
    finally:
        connection.close()
    return result
登录后复制

在此更新的代码中:

  1. SQL 字符串 (sql) 被传递给 text() 以创建参数化 SQL 对象(sql_text)。
  2. 关键字参数(值)提供给执行方法以替换 SQL 字符串中的占位符。

现在,您可以使用以下方法参数化您的 SQL,而不会牺牲安全性__sql_to_data(sql, 值):

sql = 'SELECT ... WHERE user_id = :user_id'
values = { 'user_id' : 3 }
results = __sql_to_data(sql, values)
登录后复制

以上是如何安全地将参数传递给 SQLAlchemy 的 `connection.execute` 方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板