Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Melewati Parameter dengan Selamat kepada 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:
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!