提供的代码片段使用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
在此更新的代码中:
现在,您可以使用以下方法参数化您的 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中文网其他相关文章!