pyてよn日記

一寸先は闇が人生

Django のデータベース API を Python シェルで利用する

 Django の基本事項のメモ書き.

Python シェルの起動

 Django のデータベース API,つまり,Django が提供する DB のテーブル,レコードを操作する API(ORM)は,manage.py 経由で起動する Python シェルにより使うことができる.シェルを起動するコマンドは以下の通り.

# $ python  これだと DB API が使えない
$ python manage.py shell

 単なる python コマンドではなく,manage.py 経由で Python シェルを起動することで,DJANGO_SETTINGS_MODULE 環境変数が設定され,Djnago に config/settings.py ファイルへの import パスが与えられる.

 これにより設定が読み込まれ,Django のデータベース API が使用できる Python シェルが起動される.

シェル起動後のモデルの import

 シェルを起動したら実際にデータベース API を使ってみる.データベース API を使うには,はじめに models.py に実装した各モデルを import すれば良い.

>>> from [app-name].models import [model1], [model2], ...

 例えば,Django の公式チュートリアルで実装した polls というアプリケーションのモデルを import する場合は以下のようになる(ここでは,同時に timestamp を扱うためのモジュールも import している).

>>> from polls.models import Question, Choice
>>> from django.utils import timezone

テーブルのレコード一覧を取得

 [model].objects.[クエリ] によってレコードの操作ができる.クエリの結果はクエリセット(モデルインスタンスのリスト,つまり,クエリの結果取得できたそのテーブルの「レコードのリスト」だと考えれば良い),またはモデルインスタンス(レコード)として返される.

 公式チュートリアルを参考にサンプルコードを以下に示す.

# 全レコード取得
>>> Question.objects.all()  # クエリセット

# レコードを一件取得
>>> Question.objects.all()[0]  # モデルインスタンス

# レコードの更新:一件のレコードを取得して編集,保存
>>> q = Question.objects.all()[0]
>>> q.question_text  # 変更前
>>> q.question_text = 'hoge'
>>> q.question_text  # 変更の確認
>>> q.save()  # 更新

 q の属性を変更し,q.save() を実行することでレコードの更新が完了する.

参考

qiita.com