Rumah > Soal Jawab > teks badan
P粉4349968452023-08-23 15:50:40
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 bawah python2.7
和pymysql==0.7.11
P粉2121146612023-08-23 00:26:09
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.