オブジェクトを作成したい
models.py
from django.db import models
class Human(models.Model):
name = models.CharField('名前', max_length=200)
age = models.IntegerField('年齢', null=True, blank=True)
def __str__(self):
return self.name
普通Djangoでオブジェクトを作成するとき、以下のように書く。
taro = Human.objects.create(name='太郎', age=30)
taro.save()
hanako = Human(name='花子', age=2)
hanako.save()
何の問題もないだろう。
こんな時どうする?
models.py
class TestModel(models.Model):
field_1 = models.CharField('フィールド1', max_length=255)
field_2 = models.CharField('フィールド2', max_length=255)
...
field_50 = models.IntegerField('フィールド50', null=True)
def __str__(self):
return self.field_23
項目が50個あるCSVファイルから、DjangoのORMを通してDB投入したいというケース。
上のHumanモデルみたいにやろうとすると
df = pd.read_csv('test_data.csv')
for _, row in df.iterrows():
t = TestModel.objects.create(field_1=row[0], field_2=row[1], field_3=row[2]....)
50個も書くなんて正気の沙汰じゃない。
辞書にして展開しながら引数に渡す!
df = pd.read_csv('test_data.csv')
for _, row in df.iterrows():
dict_data = row.to_dict()
t = TestModel.object.create(**dict_data)
スマート!
Pythonでは関数の引数にリストやタプル、辞書を展開しながら渡すことができる。
参考