首頁 > 資料庫 > mysql教程 > 如何將命名參數與 SQLAlchemy 的「connection.execute」一起使用以實現更安全、更易讀的 SQL 查詢?

如何將命名參數與 SQLAlchemy 的「connection.execute」一起使用以實現更安全、更易讀的 SQL 查詢?

Susan Sarandon
發布: 2024-12-31 19:20:14
原創
980 人瀏覽過

How Can I Use Named Parameters with SQLAlchemy's `connection.execute` for Safer and More Readable SQL Queries?

在SQLAlchemy connection.execute 中使用命名參數

SQLAlchemy 的connection.execute 方法可以執行資料組地圖。最初使用字串格式實作以在查詢中包含參數,可以增強此方法以利用命名參數來提高效率和安全性。

修改過程

修改接受命名參數的程式碼,可以採取以下步驟:

  1. 利用SQLAlchemy 的text()函數解析SQL字串:

    sql = text("SELECT users.fullname || ', ' || addresses.email_address AS title FROM users, addresses WHERE users.id = addresses.user_id AND users.name BETWEEN :x AND :y AND (addresses.email_address LIKE :e1 OR addresses.email_address LIKE :e2)")
    登入後複製
  2. 將命名參數傳遞給execute() 函數:

    conn.execute(sql, {"x": "m", "y": "z", "e1": "%@aol.com", "e2": "%@msn.com"})
    登入後複製

命名參數的好處

使用命名參數提供了幾個好處:

  • 降低SQL 注入的風險:利用命名參數,開發人員可以避免與字串格式化相關的潛在風險,這可能導致SQL 注入漏洞。
  • 提高程式碼可讀性:命名參數使程式碼更具可讀性和更容易理解,特別是在處理涉及多個參數的複雜查詢。

替代方法

或者,可以定義一個函數來包裝執行功能並接受命名參數作為字典:

def sql_to_data(sql, values):
    result = []
    connection = engine.connect()
    try:
        rows = connection.execute(sql, values)
        ...
    finally:
        connection.close()
    return result
登入後複製

透過這種方式,可以執行查詢with:

sql = 'SELECT ...'
data = {'user_id': 3}
results = sql_to_data(sql, data)
登入後複製

此方法可以使用命名參數,同時保持原始程式碼的核心功能。

以上是如何將命名參數與 SQLAlchemy 的「connection.execute」一起使用以實現更安全、更易讀的 SQL 查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板