Cara selamat untuk mengemas kini entri jadual mysql menggunakan kamus dalam python (halang suntikan SQL)
P粉627427202
P粉627427202 2023-09-08 20:06:07
0
1
519

Saya sedang menulis fungsi pembantu untuk aplikasi web saya yang mengemas kini pangkalan data berdasarkan beberapa maklumat yang diperoleh daripada API luaran (bukan input pengguna). Saya mempunyai kod berikut, tetapi ia ditandakan sebagai "tidak selamat" oleh pakej python Bandit.

Sebaik-baiknya saya boleh menulis fungsi dengan cara yang mengekodkan lajur untuk dikemas kini, tetapi saya fikir ia juga boleh dilakukan secara dinamik.

Adakah ini cara yang selamat untuk mengemas kini jadual (tiada suntikan SQL mungkin)?

import mysql.connector as database def update_message_by_uid(uid: str, update_dict: dict) -> None: # Fetches the previous entry from the database using the unique identifier message_info_dict = get_message_by_uid(uid) # check that all the keys of the update dict are also in the original dict assert set(update_dict.keys()) <= set( message_info_dict.keys() ), "Some of the keys in the dictionary passed are not valid database columns" # We update the entry for all entries in the dictionary containing the updates statement = 'UPDATE messages SET {} WHERE uid = %s'.format(", ".join('{}=%s'.format(k) for k in update_dict)) # Concatenates the values of the dict with the unique identifier to pass it to the execution method as one variable data = list(update_dict.values()) + [uid] cursor.execute(statement, data)

P粉627427202
P粉627427202

membalas semua (1)
P粉926174288

Anda harus meletakkan nama lajur dalam tanda belakang sekiranya nama lajur ialahSQL reserved keywordatau mengandungi ruang, tanda baca atau aksara antarabangsa. Juga pastikan bahawa aksara backtick dalam nama lajur digantikan dengan dua backtick.

assignments = ", ".join(f"`{k.replace('`', '``')}`=%s" for k in update_dict) statement = f"UPDATE messages SET {assignments} WHERE uid = %s"

Saya lebih suka menggunakan rentetan f daripada format().

    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan
    Tentang kita Penafian Sitemap
    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!