Help us understand the problem. What is going on with this article?

外部アプリからもDjangoのORMを使ってDBを操作したい

More than 1 year has passed since last update.

Djangoのモデル操作や参照については、

python manage.py MY_COMMAND

とかやれば出来るのだが、これはDjangoのアプリケーション配下に /app_name/management/commands/MY_COMMAND.pyとして置き、BaseCommandを継承して下記のようにしなければならない。

MY_COMMAND.py
from django.core.management.base import BaseCommand, CommandError
class Command(BaseCommand):
    def handle(self, *args, **options):
        print 'hogefuga'

こうすることで、上記のmanage.py MY_COMMANDによってDjangoの拡張コマンドとして利用することが可能になる。
Djangoのアプリと関連した何かを作りたい時は上記で良いですね。

Djangoのアプリと関係ないけどDBを参照したい

DjangoのDBを何かしらの管理情報のマスターとしている場合や、格納されている結果を使って全く別のプログラムと連携させたいときは、manage.pyの拡張ではなく、外部から呼び出す形にしたい。

Djangoの裏はただのSQLiteやMySQLなので、直接アクセスして情報を読取るってのでも良いんですが、せっかくDjangoでModelを定義したのに、そのORMを使わないのもなーと
というわけで、ORMを外部から使える方法です。
※注 : 下記の方法は、アプリをDjangoプロジェクトに依存させてしまう方法です。Djangoプロジェクトのディレクトがずれたりすれば当然、参照先も変更の必要があります。

Projectをライブラリとして読み込ませる

下記の手順で、外部からもDjangoのORMを利用できます

  • sys.pathにDjangoのプロジェクトを指定
  • Djangoの環境変数DJANGO_SETTINGS_MODULEにプロジェクトsettings.pyを指定
  • modelsのimport
ORM_test.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys

def CallORMapper():
    sys.path.append('/YOUR/DJANGO-PROJECT')
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "DJANGO-PROJECT.settings")
    objects = MODEL_NAME.objects.all()
    from DJANGOAPPNAME.models import MODEL_NAME
    print objects

if __name__ == "__main__":
    CallORMapper()

参考

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away