在SQLAlchemy的connection.execute中有效傳遞參數
在SQLAlchemy中,connection.execute()方法允許使用者執行SQL語句並允許使用者執行SQL語句並檢索有效地取得結果。但是,在向 SQL 語句傳遞參數時,安全有效地執行此操作非常重要。
理解問題
如您所提到的,您目前正在使用SQL 格式化將參數傳遞給SQL 字串,這涉及在SQL 語句上使用format () 方法。雖然此方法可能很方便,但它不是最佳實踐,並且可能導致 SQL 注入漏洞。相反,SQLAlchemy 提供了多種機制來安全有效地將參數傳遞給 SQL 語句。
使用文字 SQL 的解決方案
一個建議的方法是使用 SQLAlchemy.sql.text () 函數建立文字 SQL 語句物件。該物件提供對綁定參數的支持,可以幫助防止 SQL 注入攻擊。以下是範例:
from sqlalchemy.sql import text sql = text("SELECT * FROM users WHERE name = :name")
然後,您可以對產生的文字 SQL 物件使用execute()方法,並使用關鍵字參數指定參數值:
connection.execute(sql, {"name": "John"})
解決方案使用參數化函數
另一種方法是使用下列方法建立參數化函數sqlalchemy.sql.expression.bindparam() 函數。此函數可讓您為稍後傳入的參數值建立佔位符:
from sqlalchemy.sql.expression import bindparam params = [ bindparam("name", type_=String), bindparam("age", type_=Integer) ] sql = sqlalchemy.text("SELECT * FROM users WHERE name = :name AND age = :age") connection.execute(sql, {"name": "John", "age": 30})
將參數傳遞給您的自訂函數
調整您的__sql_to_data()函數接受參數,你可以使用字典來儲存參數值:
def __sql_to_data(sql, params): connection = engine.connect() try: rows = connection.execute(sql, params) # ... (Remaining code) finally: connection.close()
然後你可以使用參數值字典呼叫此函數,例如:
data = {"user_id": 3} __sql_to_data(sql_get_profile, data)
結論
透過使用建議的方法,您可以安全有效地將參數傳遞給SQL SQLAlchemy中的語句,增強資料庫應用程式的安全性和可維護性。
以上是如何在SQLAlchemy的`connection.execute()`中安全有效地傳遞參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!