executemany は、Python での MySQL 辞書リストの挿入をどのように最適化できますか?

Mary-Kate Olsen
リリース: 2024-11-07 19:59:03
オリジナル
574 人が閲覧しました

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

Python で MySQL ディクショナリ リストを効率的に挿入するためのexecutemany の利用

データ スクレイピングでは、多くの場合、テーブルから情報を抽出してデータベースに保存します。従来のアプローチは機能しますが、最適化されていないと非効率になり、データベースがクラッシュする可能性があります。

辞書のリストから 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート