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

Django

Posted by skw