Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Melewati Parameter dengan Selamat kepada Kaedah `connection.execute` SQLAlchemy?

Bagaimana untuk Melewati Parameter dengan Selamat kepada Kaedah `connection.execute` SQLAlchemy?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-04 08:11:39207semak imbas

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

Melalui Parameter dalam kaedah connection.execute SQLAlchemy

Coretan kod yang disediakan mendapatkan semula data daripada pertanyaan SQL menggunakan kaedah connection.execute dan menukar hasilnya kepada tatasusunan peta. Walau bagaimanapun, parameterisasi pada masa ini dikendalikan oleh pemformatan rentetan, yang menimbulkan risiko keselamatan.

Untuk menyelesaikan isu ini, fungsi text() SQLAlchemy boleh digunakan untuk menjana pertanyaan SQL berparameter. Fungsi ini mengambil rentetan SQL sebagai hujah dan membolehkan penggunaan parameter kata kunci untuk menentukan nilai semasa pelaksanaan.

Berikut ialah versi kod yang dikemas kini:

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

Dalam kod yang dikemas kini ini:

  1. Rentetan SQL (sql) dihantar ke text() untuk mencipta objek SQL berparameter (sql_text).
  2. Parameter kata kunci (nilai) disediakan untuk kaedah laksana untuk menggantikan ruang letak dalam rentetan SQL.

Kini, anda boleh membuat parameter SQL anda tanpa mengorbankan keselamatan dengan menggunakan __sql_to_data(sql, nilai):

sql = 'SELECT ... WHERE user_id = :user_id'
values = { 'user_id' : 3 }
results = __sql_to_data(sql, values)

Atas ialah kandungan terperinci Bagaimana untuk Melewati Parameter dengan Selamat kepada Kaedah `connection.execute` SQLAlchemy?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn