Rumah  >  Artikel  >  pangkalan data  >  Bagaimanakah boleh melaksanakan banyak mengoptimumkan sisipan MySQL senarai kamus dalam Python?

Bagaimanakah boleh melaksanakan banyak mengoptimumkan sisipan MySQL senarai kamus dalam Python?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-07 19:59:03570semak imbas

How can executemany optimize MySQL insertion of dictionary lists in 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn