Heim >Datenbank >MySQL-Tutorial >Wie kann ExecuteMany die MySQL-Einfügung von Wörterbuchlisten in Python optimieren?

Wie kann ExecuteMany die MySQL-Einfügung von Wörterbuchlisten in Python optimieren?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-07 19:59:03646Durchsuche

How can executemany optimize MySQL insertion of dictionary lists in Python?

Verwendung vonexecutemany für die effiziente MySQL-Einfügung von Wörterbuchlisten in Python

Beim Data Scraping werden häufig Informationen aus Tabellen extrahiert und in einer Datenbank gespeichert. Während der herkömmliche Ansatz funktioniert, kann er ineffizient werden und möglicherweise zum Absturz der Datenbank führen, wenn er nicht optimiert wird.

Betrachten Sie den folgenden Code, der versucht, Daten aus einer Liste von Wörterbüchern in eine MySQL-Datenbank einzufügen:

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()

Das Problem besteht darin, für jedes Wörterbuch in itemBank manuell individuelle Abfragen zu erstellen und auszuführen. Dieser Ansatz ist umständlich und fehleranfällig.

Nutzung von „executemany“

Die Lösung für diese Ineffizienz besteht in der Verwendung der Methode „executemany“, mit der Sie dieselbe Abfrage mehrfach ausführen können Mal mithilfe einer Liste von Parametern.

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()

In diesem modifizierten Code iterieren wir über die Zeilen, extrahieren Werte aus den Wörterbüchern und erstellen eine Liste von Tupeln, die anexecutemany übergeben werden. Die Abfrage selbst bleibt dieselbe, aber wir verwenden jetzt Platzhalter %s für die Werte.

Die Verwendung vonexecutemany verbessert die Effizienz drastisch, da alle Daten auf einmal gesendet werden, wodurch die Anzahl der Datenbankinteraktionen reduziert und das Risiko minimiert wird von Deadlocks.

Das obige ist der detaillierte Inhalt vonWie kann ExecuteMany die MySQL-Einfügung von Wörterbuchlisten in Python optimieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn