PythonスクリプトでDjangoにデータを登録する
前の記事で作ったアパート部屋のデータベースに、管理画面からデータを登録できるようになったが、いちいち画面を開いて入力して登録するのが面倒くさい。
部屋データのCSVファイルを作って、Pythonスクリプトから一気にデータベースに登録してみる。
PythonスクリプトからDjangoのデータベースを操作するには、Django の manage.py スクリプトが参考になる。
#!/usr/bin/env python import os import sys if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproj.settings") from django.core.management import execute_from_command_line execute_from_command_line(sys.argv)
スクリプトが Django の models モジュールを読み込めるようにするため、
DJANGO_SETTINGS_MODULE 環境変数がプロジェクトの settings.py を指すようにする。
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproj.settings")
あとは csv ファイルを読みこんで Heyaモデルのインスタンスを作り、データを代入して保存(save)する。ただし、Windows環境で作った csvファイルは、文字列の文字コードが cp932 なので utf-8 に変換しなければならない。
import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproj.settings") import csv from apartment.models import Heya reader = csv.reader(open("kaijyu-1.csv")) for r in reader: print r h = Heya() h.tanako = r[0].decode('cp932').encode('utf-8') h.bango = r[1] h.hirosa = r[2] h.yachin = r[3] h.save()
csvファイルは kaijyu-1.csv のファイル名で次のとおり。
ベムラー,101,2DK,35000 バルタン星人,102,2DK,35000 ネロンガ,103,1DK,30000 巨大ラゴン,201,2DK,36000 グリーンモンス,202,2DK,36000 ゲスラ,203,1DK,31000 アントラー,301,2DK,40000 レッドキング,302,2DK,40000 チャンドラー,303,1DK,37000
データを登録するスクリプトはプロジェクトのディレクトリ直下に保存して実行した。
これ以外のディレクトリでスクリプトを動作させるには、sys.path を設定してプロジェクトがどこにあるのかを Python に伝えておく必要がある。
このプロジェクトのディレクトリは c:\Users\skw\django\myproj なので、
sys.path.append(r'c:\Users\skw\django\myproj')
とすればよい。
たとえば、どこのディレクトリに置かれても、Djangoデータベースの内容を表示するスクリプトは次のとおり。
import sys sys.path.append(r'c:\Users\skw\django\myproj') import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproj.settings") from apartment.models import Heya for h in Heya.objects.all(): print h.tanako print h.bango print h.hirosa print h.yachin