dfのデータを一気にモデルに書き込みたいんだ

2024年6月10日

DataFrameのデータを一括でモデルに書き込む方法があります。そのために、bulk_createメソッドを使用します。このメソッドを使うと、DataFrameの各行を一括してモデルに追加することができます。

以下は、修正されたコードです:

python
import pandas as pd
from value_search.models import Rakuten_Searvey_data

def main():
    import_file = "/home/NBSystem/value_search/import/rakuten1_servey_data.csv"
    df = pd.read_csv(import_file)
    
    # DataFrameの各列のデータ型を適切に変換する
    df['自社品番'] = df['自社品番'].astype(str)
    df['商品名'] = df['商品名'].astype(str)
    df['調査ワード'] = df['調査ワード'].astype(str)
    df['調査ワード2'] = df['調査ワード2'].astype(str)
    df['除外ワード'] = df['除外ワード'].astype(str)
    df['原価'] = df['原価'].astype(int)
    df['調査下限価格'] = df['調査下限価格'].astype(int)
    df['調査上限価格'] = df['調査上限価格'].astype(int)
    df['調整下限価格'] = df['調整下限価格'].astype(int)
    df['調整上限価格'] = df['調整上限価格'].astype(int)
    df['調整金額'] = df['調整金額'].astype(int)
    df['価格調整フラグ'] = df['価格調整フラグ'].astype(int)
    df['メーカー名'] = df['メーカー名'].astype(str)
    df['メーカー品番'] = df['メーカー品番'].astype(str)
    
    # DataFrameのデータをモデルに一括で書き込む
    models_to_create = []
    for _, row in df.iterrows():
        model = Rakuten_Searvey_data(
            自社品番=row['自社品番'],
            商品名=row['商品名'],
            調査ワード=row['調査ワード'],
            調査ワード2=row['調査ワード2'],
            除外ワード=row['除外ワード'],
            原価=row['原価'],
            調査下限価格=row['調査下限価格'],
            調査上限価格=row['調査上限価格'],
            調整下限価格=row['調整下限価格'],
            調整上限価格=row['調整上限価格'],
            調整金額=row['調整金額'],
            価格調整フラグ=row['価格調整フラグ'],
            メーカー名=row['メーカー名'],
            メーカー品番=row['メーカー品番']
        )
        models_to_create.append(model)

    # モデルを一括で保存する
    Rakuten_Searvey_data.objects.bulk_create(models_to_create)

    # 保存されたデータを取得して表示する
    saved_data = Rakuten_Searvey_data.objects.all()
    for data in saved_data:
        print(data.原価)  # 保存されたデータの原価を表示する

if __name__ == "__main__":
    main()

このコードでは、DataFrameから取得したデータをbulk_createメソッドを使って一括でモデルに保存しています。保存後、データが正常に保存されたかどうかを確認するために、保存されたデータの一部を表示しています。

未分類

Posted by ぼっち