Rumah > Artikel > pangkalan data > Bagaimanakah boleh melaksanakan banyak mengoptimumkan sisipan MySQL senarai kamus dalam Python?
Menggunakan executemany untuk Penyelitan MySQL Senarai Kamus yang Cekap dalam Python
Pengikisan data selalunya melibatkan pengekstrakan maklumat daripada jadual dan menyimpannya dalam pangkalan data. Walaupun pendekatan konvensional berfungsi, ia boleh menjadi tidak cekap, berpotensi merosakkan pangkalan data jika tidak dioptimumkan.
Pertimbangkan kod berikut yang cuba memasukkan data daripada senarai kamus ke dalam pangkalan data MySQL:
itemBank = [] for row in rows: itemBank.append((tempRow2, tempRow1, tempRow3, tempRow4)) # itemBank contains dictionaries representing data from each table row for item in itemBank: tempDict1 = item[0] tempDict2 = item[1] tempDict3 = item[2] tempDict4 = item[3] q = """ INSERT IGNORE INTO TABLE1 ( Item_Name, Item_Price, Item_In_Stock, Item_Max, Observation_Date ) VALUES ( "{0}", "{1}", "{2}", "{3}", "{4}" ) """.format(tempDict1['Item_Name'], tempDict2['Item_Price'], tempDict3['Item_In_Stock'], tempDict4['Item_Max'], getTimeExtra) try: x.execute(q) conn.commit() except: conn.rollback()
Isu di sini terletak pada membina dan melaksanakan pertanyaan individu secara manual untuk setiap kamus dalam itemBank. Pendekatan ini menyusahkan dan terdedah kepada ralat.
Memanfaatkan executemany
Penyelesaian kepada ketidakcekapan ini adalah dengan menggunakan kaedah executemany, yang membolehkan anda melaksanakan berbilang pertanyaan yang sama kali menggunakan senarai parameter.
itemBank = [] for row in rows: itemBank.append(( tempRow2['Item_Name'], tempRow1['Item_Price'], tempRow3['Item_In_Stock'], tempRow4['Item_Max'], getTimeExtra )) #append data q = """ insert ignore into TABLE1 ( Item_Name, Item_Price, Item_In_Stock, Item_Max, Observation_Date ) values (%s,%s,%s,%s,%s) """ try: x.executemany(q, itemBank) conn.commit() except: conn.rollback()
Dalam kod yang diubah suai ini, kami mengulangi baris, mengekstrak nilai daripada kamus dan mencipta senarai tupel untuk dihantar untuk melaksanakan banyak. Pertanyaan itu sendiri tetap sama, tetapi kami kini menggunakan ruang letak %s untuk nilai.
Menggunakan executemany secara drastik meningkatkan kecekapan, kerana ia menghantar semua data sekali gus, mengurangkan bilangan interaksi pangkalan data dan meminimumkan risiko daripada kebuntuan.
Atas ialah kandungan terperinci Bagaimanakah boleh melaksanakan banyak mengoptimumkan sisipan MySQL senarai kamus dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!