Django アプリのダミーデータを大量投入するスクリプトをかく
モデルのフィールドが変わったり名前変わったりしそうだし、開発初期だと sqlite でサクっとつくって壊したりする。というときでも、とりあえずサイトを動かしたりするためになんらかのダミーデータを大量投入する必要はある。で、つくってたりした。
データ量としては10モデル x 10 とかつくれればよかったから多くはないけど、外部キーの組み合わせでよしなにやる必要があるので結果的にはとりあえず50個とか200個とかの単位でつくった。
人に聞いた
いろいろ
- python manage.py shell で for でぶんまわす
- Emacs あたりで生 SQL かいてコピペする
- むしろ Emacs からそのまま流す
- mysql workbench なるものがつかいやすいらしい
とかなんかまあなんかいろいろあったけど、とりあえずまだ sqlite だしまあ for でぶんまわした。生SQLをかくのはだるそうだし、ORM であわせたほうが楽っぽい気がしたし。
from django.utils.timezone import now from myproj.models import MyModel for i in xrange(1, 50): MyModel.object.create(name="name{0}".format(i), create_time=now())
まあこんな感じでゴリゴリ連番でつくっていった
のはいいけど
最初の一回はどうにか1時間くらいでつくったのはいいけど、モデルかわったり、外部キーでいろいろつくらないといけなかったからやっぱりスクリプトにした。やってることはだいたい上記なんだけど、どうしたらラクにできるかと。
python のスクリプトにすればいいだけだった
そりゃそうだったんだが、要は make_sql とか作って python manage.py shell の中で import make_sql make_sql.main() とかすればよかっただけだった。以下はサンプル。
# coding: utf-8 if __name__ == '__main__': main() def main(): make_user() make_author() make_book() def make_user(): for i in xrange(1, 30): User.objects.create( name="name{0}".format(i), email="email{0}@email.com".format(i), is_delete=False) # あとは外部キーとかたくさんコピペしながら条件付けしてつくっていく ...
# django でのシェルにはいって python manage.py shell # インポートして import make_sql # 流す make_sql.main()