外部から Django プロジェクトのデータベースを操作する

Django プロジェクト(ディレクトリ)の外部にある Python コードから、Django アプリケーションのデータベースを操作します。


ドキュメンテーションにあるように、モデルをインポートする前に以下の手順を実行しておきます。

1. プロジェクトのパッケージを sys.path に追加します。
2. DJANGO_SETTINGS_MODULE 環境変数がプロジェクトの settings.py を指すように設定します。


この手順なしに、外部のコードが Djangomodels モジュールをインポートした場合、ImportError が発生します。

ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.


ここでは、プロジェクト django_project のアプリケーション app_name にモデル models.py が定義されているとします。

other.py(シンボリック・リンク等で django_project を参照)

/django_project
    __init__.py
    manage.py
    settings.py
    urls.py
    /app_name
        __init__.py
        models.py
        tests.py
        views.py


外部の Python コードは modelsインポートする前に以下の手順を踏んでください。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
# プロジェクトのパッケージを sys.path に追加する
sys.path.append('django_project.app_name')

import os
# 環境変数 DJANGO_SETTINGS_MODULE にプロジェクトの settings をセット
os.environ['DJANGO_SETTINGS_MODULE'] = 'django_project.settings'

# Model モジュールをインポートする
from django_project.app_name import models

# データベースを操作可能になる
models.ModelXXX(name='xxx').save()  # 保存
models.ModelXXX.objects.all()  # 取得