1

Django にインポートする大きな CSV ファイルがあります。現時点で、私の計算が正しければ、32 時間以内に完了します。これを高速化することは可能ですか?

~157,000 行と 15 列の CSV ファイルがあります。これを Django モデルに読み込み、MySQL データベースに保存しています。ここで魔法が起こります:

reader = csv.reader(csvFile, delimiter=',', quotechar='"')
for row in reader:
    tmpRecord = Employee(
        emp_id = row[0], # Primary Key
        name = row[1],
        # snipped for brevity; other columns assigned
        group_abbr = row[14]
    )

    pieces = string.split(tmpRecord.name.title(), " ")
    newName = pieces[1]
    try:
        newName += " " + pieces[2]
    except IndexError:
        pass
    newName += " " + pieces[0]
    tmpRecord.name = newName

    tmpRecord.save()

「pieces」チャンクは、「LASTNAME FIRSTNAME MIDDLE」から名前フィールドを取得し、「Firstname Middle Lastname」に変換しています。

これは、新しい従業員と既存の従業員レコードへの変更でデータベースを更新するために、月に約 1 回実行されます。多くの場合、既存のレコードは変更されませんが、いずれか (または複数) のフィールドが変更される可能性があります。save()各レコードを呼び出すよりも時間がかからない、追加できるチェックはありますか?

現時点では、20 レコードあたり約 15 秒で完了します。これを(実質的に)スピードアップできる方法はありますか?

アップデート:

問題がある場合emp_idは、テーブルの主キーです。以前の従業員と同じ ID を持つ従業員はいません (退職した従業員を含む)。

4

2 に答える 2

2

bulk_create が役立つと思います https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.bulk_create

データベースに既に存在するデータに問題がある場合。他のテーブルに挿入し、SQL クエリを使用して問題を解決します。

于 2013-04-10T19:41:26.750 に答える
1

おそらく、Python スクリプトを使用して中間ロード CSV を準備し、代わりにロード操作を試してみてはいかがでしょうか?

http://dev.mysql.com/doc/refman/5.6/en/load-data.html

于 2013-04-10T19:46:00.737 に答える