Maison > base de données > tutoriel mysql > le corps du texte

Comment performmany peut-il optimiser l'insertion MySQL de listes de dictionnaires en Python ?

Mary-Kate Olsen
Libérer: 2024-11-07 19:59:03
original
574 Les gens l'ont consulté

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

Utilisation d'executemany pour une insertion MySQL efficace de listes de dictionnaires en Python

Le grattage de données implique souvent l'extraction d'informations à partir de tables et leur stockage dans une base de données. Bien que l'approche conventionnelle fonctionne, elle peut devenir inefficace et potentiellement faire planter la base de données si elle n'est pas optimisée.

Considérez le code suivant qui tente d'insérer des données d'une liste de dictionnaires dans une base de données 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()
Copier après la connexion

Le problème ici réside dans la construction et l'exécution manuelles de requêtes individuelles pour chaque dictionnaire dans itemBank. Cette approche est lourde et sujette aux erreurs.

Tirer parti de l'exécution

La solution à cette inefficacité consiste à utiliser la méthode exécutermany, qui vous permet d'exécuter la même requête plusieurs fois. fois en utilisant une liste de paramètres.

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()
Copier après la connexion

Dans ce code modifié, nous parcourons les lignes, extrayons les valeurs des dictionnaires et créons une liste de tuples à transmettre à l'exécution. La requête elle-même reste la même, mais nous utilisons désormais les espaces réservés %s pour les valeurs.

L'utilisation d'executemany améliore considérablement l'efficacité, car elle envoie toutes les données en une seule fois, réduisant ainsi le nombre d'interactions avec la base de données et minimisant les risques. des impasses.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal