2
1

More than 3 years have passed since last update.

[メモ] Django外のPythonプログラムから Django ORM を使用するコード

Last updated at Posted at 2021-08-16
本シリーズのトップページ
https://qiita.com/robozushi10/items/4559a281d0319eb62c6c

内容

Gunicorn を使った Django 2.x や 3.0系の環境で、
Django 外部の Python プログラムから Django ORM を使用するコード.
logger も含めて記載している.

本コードが必要になった理由は末尾近くに記載している.

条件

・Gunicorn を使用している
・次のような構成で settings.py が存在している

home
|-- foo
    |-- mysite ................... Django プロジェクト
        |-- myapp ................ Django アプリ
        |   |-- models.py
        |   略
        |-- config
            |-- settings.py
            |-- urls.py
            |-- wsgi.py
            略

コード

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

# import の例. 参考なので不要なものが多々ある.
import sys; sys.dont_write_bytecode = True
import os, json, time, copy, requests, textwrap, socket, pickle, base64
from datetime import datetime
from pprint import pprint

# Django プロジェクトのパスを import 対象に加える 
sys.path.append('/home/foo/mysite')

# Gunicorn なので環境変数を明示的に指定してやる
os.environ.setdefault("DJANGO_SETTINGS_MODULE", 'config.settings')

# myapp/models.py を読み込む
from django.core.wsgi import get_wsgi_application
myapp = get_wsgi_application()
from myapp.models import *

# ロガー設定
from logging import basicConfig, getLogger, DEBUG, ERROR, INFO, WARN, CRITICAL
format = "[%(levelname)s][%(pathname)s:%(lineno)s:%(funcName)s] %(message)s"
basicConfig(level=DEBUG, format=format)
logger = getLogger('django')

if __name__ == "__main__":

  # ORM を使う. (下記はクラス Hoge に対する操作である)
  objects = Hoge.objects.all()
  logger.error(objects)

外部プログラムから ORM 操作が必要になった理由

下図のように Jenkins を介した機構が必要になったため.

image.png

参考サイト

URL
http://blog.shigepon.info/blog/2015/07/28/use-django-model-outside-django-project/#.YRnQnPv7Tbi
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1