利用executemany 在Python 中高效插入MySQL 字典列表
数据抓取通常涉及从表中提取信息并将其存储在数据库中。虽然传统方法有效,但如果不进行优化,它可能会变得低效,甚至可能导致数据库崩溃。
考虑以下尝试将字典列表中的数据插入 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()
这里的问题在于为 itemBank 中的每个字典手动构建和执行单独的查询。这种方法很麻烦,而且容易出错。
利用executemany
解决这种低效率问题的方法是利用executemany方法,它允许您执行多个相同的查询使用参数列表的次数。
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()
在这段修改后的代码中,我们迭代行,从字典中提取值并创建一个元组列表以传递给executemany。查询本身保持不变,但我们现在使用占位符 %s 来表示值。
使用executemany 可以大大提高效率,因为它一次性发送所有数据,减少了数据库交互次数并将风险降至最低死锁。
以上是executemany如何优化Python中MySQL字典列表的插入?的详细内容。更多信息请关注PHP中文网其他相关文章!