帶有參數化SQL語句的SQLAlchemy Connection.execute()
SQLAlchemy的connection.execute()方法允許開發人員執行SQL語句並轉換結果放入地圖數組中。雖然使用字串格式進行參數替換是一種常見做法,但它會帶來安全風險並限制靈活性。
為了增強程式碼安全性並啟用參數化,可以利用 sqlalchemy.sql.text() 函式建立參數化SQL 語句。此方法可確保正確處理綁定參數,降低 SQL 注入攻擊的風險。
要將參數化合併到問題中提供的 __sql_to_data() 函數中,請將其修改為以下:
def __sql_to_data(sql_text, parameters): result = [] connection = engine.connect() try: rows = connection.execute(sql_text, parameters) 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_text參數應該是透過sqlalchemy.sql.text()解析的SQL語句,parameters參數是一個字典,包含要解析的值
現在,您可以將字典傳遞給execute()方法,而不是使用字串格式插入參數:
return __sql_to_data(sql_get_profile, {'user_id': user_id})
這種方法提供了一種安全靈活的方式來傳遞SQLAlchemy 的connection.execute() 方法中的參數。
以上是如何安全地使用 SQLAlchemy 的 Connection.execute() 和參數化 SQL 語句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!