ホームページ >データベース >mysql チュートリアル >パラメータ化された SQL ステートメントで SQLAlchemy の Connection.execute() を安全に使用するにはどうすればよいですか?
パラメータ化された 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() メソッドでパラメータを渡す安全かつ柔軟な方法。
以上がパラメータ化された SQL ステートメントで SQLAlchemy の Connection.execute() を安全に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。