LoginSignup
3
2

More than 5 years have passed since last update.

python のインタラクティブシェルからdjangoをimportしてDBにモノを保存したかった人の話

Posted at

背景

Djangoでappを作っているんだけど、

  • Pythonスクリプトを実行してクローリングして取ってきたデータを
  • pythonのスクリプトの中で整形して
  • django のDBに保存して利用したい

これが目標なんだけど、ここではPythonからDjangoにアクセスしてDBなり好きなことをするところまでまとめる。

バージョン等

  • Django 1.9.2
  • python 2.7.10
  • Mac OS X

本編へGO

やりたいことは冒頭でも述べたように、pythonのインタラクティブシェルからdjangoのアプリをimportしてそこからいじいじする。

python_django.py
import os,sys,django

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "you_apps_name.settings") # *1

sys.path.append(r'/Users/kanuchi34/Projects/python/dj/quotes') # *2
 
django.setup() # *3

順に注釈をつけていく

注釈 *1

これが詳しく何をやってるかはまだ調べてないんだけど、要するにDJANGOを使うための基本的な情報を提供しているみたい。

なんか実はpythonコードを実行する方法って何個かあるらしくて、そのうちの1つに

manage.py をコードの実行と一緒に呼び出す

みたいな方法がありまして、「きっとこいつが色々な設定を肩代わりしてるんだろうなぁ」と思い覗いてみたら、この *1 のコードがあった

つまりdjangoはdjangoで、pythonの中にあるであろう、DJANGO_SETTING_MODULEを呼び出して、そんでpythonとdjangoを利用できるようにしているんだと思う

注釈 *2

このコードは、着けておいて悪いことはないんだけど、省略することも可能。 pythonパスをappディレクトリ以下の環境に通すために必要らしい。

つあmり、appディレクトリにpythonスクリプトおいて実行すればなくても問題はない

注釈 *3

django.setup()

これをずーっと呼び出すの忘れてて1時間くらいぐぐってた。なんかdjangoの環境のsetuupしてkるえるんだと思う

これをコールしないと、AppDirectryIsntReady みたいなエラー文が出てきて先に進めません

ハマってたところ

この記事で書いた注釈 1のところのyour_apps_name*のところをみんな好き勝手書いてて、これが何を意味してるのか全然わからなかった(初心者あるあるなんだろうな)

1. config.local
2. myproj.settings
3. myapp.settings
4. local
5. config

最終的にmanage.py見てわかったけど、なんかこうこの辺統一できないのかなぁ。。

3
2
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
3
2