提供的程式碼片段使用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中文網其他相關文章!