16 Mart 2014 Pazar

Sorgulama Seçenekleri

Modellerden veri çekerken sorgulama için objects.filter() fonksiyonunu kullanmıştık. Bu bölümde filter() fonksiyonuna ait bazı özelliklerden bahsedeceğiz.
exact
Tam eşleştirme yapar.
>>> doktor = Doktor.objects.filter(adi__exact='Ali')
>>> doktor
[<doktor: ali="" hikmet="" mail.com="">]
Sorgusu ise şu şekilde olacaktır.
Select * from Doktor where adi='Ali';
iexact
Eşleştirme yaparken büyük küçük harf duyarsızlığı vardır.
>>> doktor = Doktor.objects.filter(adi__iexact='ali')
>>> doktor
[<Doktor: Ali , hikmet ,ali@mail.com>]
contains
Kelime grubu içerisinde arama yapar. Eğer kelime içerisinde aranan alt kelime varsa geriye döner.
>>> doktor = Doktor.objects.filter(adi__contains = 'a')
>>> 
>>> dokto
[<Doktor: Ahmet , Mehmet ,doktor@mail.com>, <Doktor: Ali , hikmet ,ali@mail.com>]
Sorgusu;
Select * from Doktor WHERE adi LIKE '%a%';
icontains
Aramayı duyarsız hale çevirir.
in
Aramayı liste içerisinden yapar.
>>> polikilinik = Polikilinik.objects.filter(kodu__in=['P404','P505'])
>>> polikilinik
[<Polikilinik: P404 , Serdivan >, >Polikilinik: P505 , İstanbul >]
gt
Girilen değerden daha büyük değerleri getirir.
>>> doktor = Doktor.objects.filter(id__gt=2)
>>> doktor
[<Doktor: Ali , hikmet ,ali@mail.com>]
idsi 2'den büyük olan doktorları listeledik.
gte
Girilen değere eşit veya daha büyük verileri getirir.
>>> doktor = Doktor.objects.filter(id__gte=2)
>>> doktor
[<Doktor: Veli , Kırmızı ,veri@mail.com>, <Doktor: Ali , hikmet ,ali@mail.com>]
id'si 2 veya daha büyük olan doktorları getirdik
lt ve lte
lt: Daha küçük veriler. lte: Eşit veya daha küçük veriler.
>>> doktor = Doktor.objects.filter(id__lt=2)
>>> doktor
[<Doktor: Ahmet , Mehmet ,doktor@mail.com>]
startswith ve istartswith
startswith: Girilen değer ile başlayan verileri getirir. istartswith: Girilen değer ile başlayan verileri duyarsız bir şekilde getirir.
>>> doktor = Doktor.objects.filter(adi__startswith='A')
>>> doktor
[<Doktor: Ahmet , Mehmet ,doktor@mail.com>, <Doktor: Ali , hikmet ,ali@mail.com>]
endswith ve iendswith
endswith: Girilen değer ile biten verileri getirir. iendswith: Girilen değer ile biten verileri duyarsız bir şekilde getirir.
>>> doktor = Doktor.objects.filter(adi__endswith='A')
>>> doktor
[<Doktor: Ahmet , Mehmet ,doktor@mail.com>, <Doktor: Ali , hikmet ,ali@mail.com>]
range
Girilen aralıktaki değerleri getirir.
import datetime
baslangic = datetime.date(2005, 1, 1)
bitis = datetime.date(2005, 3, 31)
Doktor.objects.filter(giris_tarihi__range=(baslangic, bitis))
Sorgusu
Select * from Where giris_tarihi '2005-01-01' Between '2005-03-31';
year
Yıl sorgulaması yapar.
Doktor.objects.filter(giris_tarihi__year=2013)
month
Yıl sorgulaması yapar.
Doktor.objects.filter(giris_tarihi__month=10)
day
Yıl sorgulaması yapar.
Doktor.objects.filter(giris_tarihi__day=18)
HESAPLAMA FONKSİYONLARI
Sorgulama işlevi yaparken kullanabileceğimiz hesaplama fonksiyonlarına bakalım.
count
Sayma işlemi yapar.
##Doktor sayısını bulalım
>>> doktor_sayisi = Doktor.objects.all().count()
>>> doktor_sayisi
3
Avg
Ortalama hesaplar.
###Doktorların maaş ortalaması
>>> from django.db.models import Avg
>>> ucret_toplami = Doktor.objects.all().aggregate(Avg('ucret'))
>>> ucret_toplami
{'ucret__avg': 1500.0}
Max
En büyüğü bulur.
###En yüksek doktor maaşı
>>> from django.db.models import Max
>>> yuksek_ucret = Doktor.objects.all().aggregate(Max('ucret'))
>>> yuksek_ucret
{'ucret__max': 2000}
Min
En küçüğü bulur.
###En düşük doktor maaşı
>>> from django.db.models import Min
>>> dusuk_maas = Doktor.objects.aggregate(Min('ucret'))
>>> dusuk_maas
{'ucret__min': 1000}
Sum
Toplamı bulur.
###Doktorların toplam maaşı
>>> from django.db.models import Sum
>>> toplam_maas = Doktor.objects.aggregate(Sum('ucret'))
>>> toplam_maas
{'ucret__sum': 4500}
Kaynakça

1 yorum :

  1. >>> d1 = Doktor(adi='Şermin',soyadi='Böcek')
    >>> d1.save()
    >>> doktor = Doktor.objects.filter(adi__iexact='şermin')
    >>> doktor
    []
    sanıyorum turkce buyuk/kucuk karekterlerde problem yasadım.

    YanıtlayınSil