SQLAlchemy の connection.execute でパラメータを効果的に渡す
SQLAlchemy では、connection.execute() メソッドを使用して、ユーザーが SQL ステートメントを実行して取得できるようにします。効率的に結果が得られます。ただし、SQL ステートメントにパラメーターを渡す場合は、安全かつ効果的に行うことが重要です。
問題を理解する
前述したように、現在、SQL 書式設定を使用して SQL 文字列にパラメータを渡しています。これには、SQL ステートメントで format() メソッドを使用する必要があります。この方法は便利かもしれませんが、ベスト プラクティスではなく、SQL インジェクションの脆弱性を引き起こす可能性があります。代わりに、SQLAlchemy は、パラメータを SQL ステートメントに安全かつ効果的に渡すためのいくつかのメカニズムを提供します。
テキスト SQL を使用したソリューション
推奨されるアプローチの 1 つは、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)
結論
By推奨されるアプローチを利用すると、SQLAlchemy の SQL ステートメントにパラメータを安全かつ効果的に渡すことができ、データベースのセキュリティと保守性を強化できます。アプリケーション。
以上がSQLAlchemy の `connection.execute()` でパラメータを安全かつ効果的に渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。