トッカンソフトウェア

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)


			





ページのトップへ戻る