首頁 > 資料庫 > mysql教程 > 如何安全地將參數傳遞給 SQLAlchemy 的 `connection.execute` 方法?

如何安全地將參數傳遞給 SQLAlchemy 的 `connection.execute` 方法?

Mary-Kate Olsen
發布: 2025-01-04 08:11:39
原創
211 人瀏覽過

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 字串(sql) SQL()以建立參數化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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板