ホームページ > データベース > mysql チュートリアル > SQLAlchemy の `connection.execute` メソッドにパラメータを安全に渡すにはどうすればよいですか?

SQLAlchemy の `connection.execute` メソッドにパラメータを安全に渡すにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-04 08:11:39
オリジナル
220 人が閲覧しました

How to Securely Pass Parameters to SQLAlchemy's `connection.execute` Method?

SQLAlchemy の connection.execute メソッドでパラメータを渡す

提供されたコード スニペットは、connection.execute メソッドを使用して SQL クエリからデータを取得し、結果を配列に変換します。地図。ただし、現在パラメータ化は文字列の書式設定によって処理されており、セキュリティ上のリスクが生じます。

この問題を解決するには、SQLAlchemy の text() 関数を使用してパラメータ化された SQL クエリを生成できます。この関数は SQL 文字列を引数として受け取り、実行中にキーワード パラメーターを使用して値を指定できるようにします。

コードの更新バージョンは次のとおりです。

def __sql_to_data(sql, values):
    result = []
    connection = engine.connect()
    try:
        # Convert SQL to parametrized SQL
        sql_text = sql.text(sql)
        rows = connection.execute(sql_text, values)

        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
ログイン後にコピー

この更新されたコード内:

  1. SQL 文字列 (sql) が text() に渡され、パラメータ化された SQL オブジェクトが作成されます(sql_text)。
  2. キーワード パラメータ (値) は、SQL 文字列内のプレースホルダを置き換えるために、execute メソッドに提供されます。

これで、次を使用することで、セキュリティを犠牲にすることなく SQL をパラメータ化できます。 __sql_to_data(sql, 値):

sql = 'SELECT ... WHERE user_id = :user_id'
values = { 'user_id' : 3 }
results = __sql_to_data(sql, values)
ログイン後にコピー

以上がSQLAlchemy の `connection.execute` メソッドにパラメータを安全に渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート