Bersarang senarai dalam klausa IN dalam Python MySQL
P粉781235689
P粉781235689 2023-08-22 17:04:59
0
2
363

Saya tahu cara memetakan senarai kepada rentetan:

foostring = ",".join( map(str, list_of_ids) )

Saya tahu saya boleh meletakkan rentetan itu ke dalam klausa IN menggunakan:

cursor.execute("DELETE FROM foo.bar WHERE baz IN ('%s')" % (foostring))

Saya perlu melaksanakan fungsi yang sama dalam pangkalan data MySQL dengan cara yang selamat (mengelakkan suntikan SQL). Dalam contoh di atas, kerana footstring tidak diluluskan sebagai parameter untuk dilaksanakan, ia terdedah. Saya juga perlu membuat petikan dan melarikan diri di luar perpustakaan MySQL.

(Terdapat soalan SO yang berkaitan, tetapi jawapan yang disenaraikan di sana sama ada tidak berfungsi dengan pangkalan data MySQL atau terdedah kepada serangan suntikan SQL.)

P粉781235689
P粉781235689

membalas semua (2)
P粉434996845

Walaupun soalan ini sudah lama, saya ingin meninggalkan jawapan sekiranya orang lain turut mencari apa yang saya cari

Jawapan yang diterima menjadi mengelirukan apabila kita mempunyai banyak parameter atau ingin menggunakan parameter bernama

Selepas beberapa percubaan

ids = [5, 3, ...] # id列表 cursor.execute(''' SELECT ... WHERE id IN %(ids)s AND created_at > %(start_dt)s ''', { 'ids': tuple(ids), 'start_dt': '2019-10-31 00:00:00' })

Diuji dan lulus di bawahpython2.7pymysql==0.7.11

    P粉212114661

    Guna teruslist_of_ids:

    format_strings = ','.join(['%s'] * len(list_of_ids)) cursor.execute("DELETE FROM foo.bar WHERE baz IN (%s)" % format_strings, tuple(list_of_ids))

    Dengan cara ini anda boleh mengelak daripada memetik sendiri dan mengelakkan pelbagai masalah suntikan SQL.

    Perhatikan bahawa data (list_of_ids) dihantar terus kepada pemacu mysql sebagai parameter (bukan dalam teks pertanyaan), jadi tiada isu suntikan. Anda boleh menyimpan sebarang aksara dalam rentetan tanpa mengalih keluar atau memetik aksara.

      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!