Maison > Article > base de données > Comment puis-je insérer efficacement plusieurs dictionnaires dans une base de données MySQL à l'aide de la méthode `executemany()` de Python ?
Insérer plusieurs dictionnaires dans MySQL à l'aide d'executemany() en Python
Lors de la récupération de données sur le Web et de leur insertion dans une base de données MySQL, il est crucial pour optimiser les performances afin d’éviter les blocages de la base de données. Le code fourni démontre une approche inefficace qui implique l'exécution d'une requête distincte pour chaque ligne de données de table. Pour résoudre ce problème, nous allons explorer comment exploiter la méthodeexecutemany() pour insérer plusieurs lignes simultanément.
La méthodeexecutemany() vous permet d'insérer une liste de paramètres dans une instruction préparée. Il prend deux arguments : l'instruction SQL et la liste des paramètres. L'instruction SQL doit avoir des espaces réservés (%s) pour les paramètres.
Pour utiliser executemany() dans ce scénario, nous devons d'abord transformer la liste des dictionnaires en un tuple de valeurs pour chaque ligne. Ceci peut être réalisé comme suit :
itemBank = [] for row in rows: itemBank.append(( tempRow2['Item_Name'], tempRow1['Item_Price'], tempRow3['Item_In_Stock'], tempRow4['Item_Max'], getTimeExtra )) #append data
Ensuite, nous préparons l'instruction SQL avec des espaces réservés pour les paramètres :
q = """ insert ignore into TABLE1 ( Item_Name, Item_Price, Item_In_Stock, Item_Max, Observation_Date ) values (%s,%s,%s,%s,%s) """
Enfin, nous exécutons la méthodeexecutemany(), fournissant le Instruction SQL et liste des paramètres :
try: x.executemany(q, itemBank) conn.commit() except: conn.rollback()
Cette approche améliore considérablement les performances en exécutant une seule requête pour toutes les lignes de la table, évitant ainsi la surcharge de plusieurs requêtes individuelles.
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!