Kode python yang benar untuk memasukkan nilai NULL ke MySQL

Saya mencoba memasukkan beberapa variabel ke dalam database MySQL menggunakan python. Terkadang variabelnya berupa string dan terkadang tidak ada.

Versi yang sangat disederhanakan dari apa yang saya coba ada di bawah:

import MySQLdb as mdb
f = "Bob"
m = None
l = "Smith"

db = mdb.connect("blah blah blah")
with db:
    cur.execute("INSERT INTO name (first, middle, last) VALUES ('{0}', '{1}', '{2}')".format(f, m, l))

Masalahnya adalah ia memasukkan 'Tidak Ada' sebagai string, bukan sebagai nilai NULL sebenarnya.

Saya dapat mengatasi masalah ini dengan mengubah baris terakhir menjadi:

cur.execute("INSERT INTO name (first, middle, last) VALUES (%s, %s, %s)", (f, m, l))

tapi saya yakin ini membuat kode rentan terhadap serangan injeksi MySQL. Jika ada yang tahu cara yang benar menggunakan metode .format saya akan sangat berterima kasih.


person Ken Williams    schedule 25.06.2015    source sumber
comment
Tidak, pemformatan string membuat Anda rentan. Melewati nilai dengan cara kedua adalah apa yang diharapkan.   -  person That1Guy    schedule 25.06.2015
comment
Terima kasih - Saya senang saya mendapat permintaan maaf atas pertanyaan bodoh ini sebelumnya   -  person Ken Williams    schedule 25.06.2015
comment
Ini bukan pertanyaan bodoh. Penting bagi Anda untuk mengetahui cara melindungi terhadap injeksi SQL.   -  person That1Guy    schedule 25.06.2015


Jawaban (1)


Metode yang diharapkan untuk memasukkan data adalah sebagai berikut:

cur.execute("INSERT INTO name (first, middle, last) VALUES (%s, %s, %s)", (f, m, l))

Memformat string seperti pada contoh pertama membuat aplikasi Anda rentan terhadap injeksi SQL.

person That1Guy    schedule 25.06.2015
comment
Tepat. Baik % maupun .format yang tidak digunakan lagi tidak akan berfungsi dalam kasus ini. - person Neurotransmitter; 27.07.2016