Djangoのモデルを用いた値の取得(all,limit,offset,filter)
Djangoのモデルでは、allを用いて全てのデータをテーブルから取得するが、一部だけ取得することもできる。
以下のように関数を記述する。
- 値を一部取り出す[:]
os.environ.setdefault("DJANGO_SETTINGS_MODULE", 'Project.settings') # djangoのDB接続設定読み込み
import django
django.setup() # djangoのセットアップ
from app.models import User
# "select * from user"が実行され、全レコードを取得
user_list = User.objects.all()
# "select * from user limit 3"が実行され、3つだけレコードが返される
user_list = User.objects.all()[:3]
# "select * from user limit 1 offset 2"が実行され、最初から2つ飛ばして1つだけのレコードが返される
user_list = User.objects.all()[2:3]
# Userオブジェクトの10番目までの1つ飛ばしの配列が返される
user_list = User.objects.all()[:10:2]
また、all()でなくfilterを用いると、値の条件を指定して、モデルからオブジェクトのリストを返すこともできる。
- filterのサンプル(=,<,>,like,and,or)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", 'ProTwo.settings')
import django
django.setup()
from appTwo.models import User
# select * from user where first_name = 'Taro'が実行される
user_list = User.objects.filter(first_name='Taro')
# ageが10以下のものだけを取得(select * from user where age <= 10を実行)
user_list = User.objects.filter(age__lte=10)
# ageが10以上のものだけを取得(select * from user where age >= 10を実行)
user_list = User.objects.filter(age__gte=10)
# ageが10より小さいのものだけを取得(select * from user where age < 10を実行)
user_list = User.objects.filter(age__lt=10)
# ageが10より大きいのものだけを取得(select * from user where age > 10を実行)
user_list = User.objects.filter(age__gt=10)
# first_nameにTを含むものを取得(select * from user where first_name = '%T%'を実行)
user_list = User.objects.filter(first_name__contains='T')
# first_nameがTで始まるものを取得(select * from user where first_name = 'T%'を実行)
user_list = User.objects.filter(first_name__startswith='T')
# first_nameがTで終わるものを取得(select * from user where first_name = '%T'を実行)
user_list = User.objects.filter(first_name__endswith='T')
# ageが32以下かつ、first_nameがTで終わるものを取得(select * from user where age <= 32 and first_name = '%T'を実行)
user_list = User.objects.filter(first_name__endswith='T', age__lte=32)
from django.db.models import Q
# ageが32以下または、first_nameがTで終わるものを取得(select * from user where age <= 32 or first_name = '%T'を実行)
user_list = User.objects.filter(Q(first_name__endswith='T')| Q(age__lte=32))