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
603

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 ialah SQL reserved keyword atau 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!