Python Django DB関連3
前々回、前回でDjangoを使ってDBアクセスの基本をやってきたので、今回はSELECTを色々やってみます。ORDER BY
ORDER BYを行うにはorder_byを使用します。複数指定も出来ます。DESCオプションのように逆順に並べるには項目の頭に-を付けます。
from django.http import HttpResponse
from datetime import datetime
from hello.models import Tbl
def index(request):
tbls = Tbl.objects.all().order_by('-txt1', 'int1',)
s = ""
for t in tbls:
s += "<br />" + str(t.id) + ":" + t.txt1 + ":" + \
str(t.int1) + ":" + str(t.dt1)
return HttpResponse("data:" + s)
WHERE(AND)
条件指定を行うにはfilterを使用します。AND条件のように条件を繋げるには, で繋げます。
from django.http import HttpResponse
from datetime import datetime
from hello.models import Tbl
def index(request):
tbls = Tbl.objects.filter(txt1='10', int1=5)
s = ""
for t in tbls:
s += "<br />" + str(t.id) + ":" + t.txt1 + ":" + \
str(t.int1) + ":" + str(t.dt1)
return HttpResponse("data:" + s)
WHERE(OR)
OR条件で繋げる場合、Qオブジェクトを使用します。
from django.http import HttpResponse
from django.db.models import Q
from datetime import datetime
from hello.models import Tbl
def index(request):
tbls = Tbl.objects.filter(Q(txt1='10') | Q(int1=1))
s = ""
for t in tbls:
s += "<br />" + str(t.id) + ":" + t.txt1 + ":" + \
str(t.int1) + ":" + str(t.dt1)
return HttpResponse("data:" + s)
WHERE(NOT)
WHERE条件で指摘条件に一致しないデータを取得する場合、excludeを使用します。
from django.http import HttpResponse
from django.db.models import Q
from datetime import datetime
from hello.models import Tbl
def index(request):
tbls = Tbl.objects.exclude(Q(txt1='10') | Q(int1=1))
s = ""
for t in tbls:
s += "<br />" + str(t.id) + ":" + t.txt1 + ":" + \
str(t.int1) + ":" + str(t.dt1)
return HttpResponse("data:" + s)
filterを使用した場合でも、Qオブジェクトに~(チルダ)を付ければNOTになります。
from django.http import HttpResponse
from django.db.models import Q
from datetime import datetime
from hello.models import Tbl
def index(request):
tbls = Tbl.objects.filter(~Q(txt1='10'))
s = ""
for t in tbls:
s += "<br />" + str(t.id) + ":" + t.txt1 + ":" + \
str(t.int1) + ":" + str(t.dt1)
return HttpResponse("data:" + s)
項目指定で取得(辞書)
指定項目のみを取得する場合、valuesを使用します。valuesを使用すると辞書形式で取得されます。
from django.http import HttpResponse
from django.db.models import Q
from datetime import datetime
from hello.models import Tbl
def index(request):
tbls = Tbl.objects.all().values('dt1')
s = ""
for t in tbls:
s += "<br />" + str(t["dt1"])
return HttpResponse("data:" + s)
項目指定で取得(配列)
指定項目のみを取得する場合、values_listも使用できます。values_listを使用すると配列形式で取得されます。
from django.http import HttpResponse
from django.db.models import Q
from datetime import datetime
from hello.models import Tbl
def index(request):
tbls = Tbl.objects.all().values_list('dt1', 'txt1')
s = ""
for t in tbls:
s += "<br />" + str(t[0]) + "-" + str(t[1])
return HttpResponse("data:" + s)
ページのトップへ戻る