DEV Community

Cover image for Django ORM Kullanımı Üzerine Temel Bilgiler
tahsinsoyak
tahsinsoyak

Posted on

Django ORM Kullanımı Üzerine Temel Bilgiler

Django Insert Data
1. Category.objects.create(name="education")
2. category = Category(name="science")
category.save()

Kategori foreign key veri tabanında mevcut bir nesneye sahip olması gerekir; Category() nesnesini başlatırsanız ancak kaydetmezseniz, kitabın oluşturulması ilgili nesnenin kaydedilmemiş olması nedeniyle bir ValueError hatasına yol açacaktır.

Django List all objects
qs= Category.objects.all()
Çıktı;
, , , ]>
str(query.query)
Çıktı;
'SELECT "app1_category"."id", "app1_category"."name" FROM "app1_category"'

Django Update Data
Kategori listesinden ilkini seçip adını büyük harfle yazacağız:
category = Category.objects.first()
category.name = "Science"
category.save()
category.refresh_from_db()
Bazen veritabanındaki değerleri güncellemek için refresh_from_db'yi çağırmanız gerekir.

Django Spesifik Öğeyi Seçmek
1. Category.objects.get(name="education")
Aksi halde aynı isimde birden fazla nesne varsa "MultipleObjectsReturned" hatası ortaya çıkacaktır.
Bu adda bir nesne olmaması durumunda DoesNotExist oluşturulacaktır.
Sorguyla eşleşen öğelerin listesini döndürecek olan filtre işlevini kullanmanız gerekecektir.
2.Category.objects.filter(name="education")

Django Veri Aramaları
Alan aramaları, SQL WHERE yan tümcesinin içeriğini nasıl belirttiğinizdir. Bunlar, QuerySet yöntemleri filter(), include() ve get() için anahtar kelime argümanları olarak belirtilir.
Iexact: Büyük küçük harfe duyarlı olmayacak şekilde tam adı arayacaktır;
c = Category.objects.filter(name__iexact='science')
Icontains: Veri tabanındaki LIKE gibi sorgu araması yapar;
c = Category.objects.filter(name__icontains='education')

Django VEYA Sorguları
'd' ile başlayan VEYA 's' ile başlayan kategorileri alalım, LIKE d% türünde bir sorgu yapacak olan startwith alan aramasını kullanacağız. Yaygın yol, iki farklı sorgu kümesi oluşturmak ve '|' ile birleştirmektir:
Category.objects.filter(name__startswith='a') | Category.objects.filter(name__startswith='s')
Onun yerine diğer yol ise Q nesnelerini kullanmaktır, Django tanımı şöyle der: "Bir Q nesnesi (Django.db.models.Q), anahtar kelime argümanlarının bir koleksiyonunu kapsüllemek için kullanılan bir nesnedir.
Category.objects.filter(Q(name__startswith='a') | Q(name__startswith='s'))

Django VE Sorguları
'E' ile başlayan ve 'n' ile biten kategoriler alacağız,
Her koşulu filtreyle oluşturun ve & ile birleştirin:
Category.objects.filter(name__startswith='e') & Category.objects.filter(name__endswith='n')
Q Objelerini kullanın:
Category.objects.filter(Q(name__startswith='e') & Q(name__endswith='n'))
Filtre fonksiyonunun içine koşulları ekleyin:
Category.objects.filter(name__startswith='e', name__endswith='n')

Django DEĞİL Sorguları
Kimlikleri 2'den büyük olan tüm Kategorileri alalım. Hariç tutma yöntemi, koşulla eşleşmeyen sorguyu döndürür:
Category.objects.exclude(id__lt=2)
Diğer yöntem ise Q nesnelerini yaklaşık işareti (~) ile kullanmaktır:
Category.objects.filter(~Q(id__lt=2))

Django UNION Kullanımı
Birleşim, farklı sorgu kümelerinin sonuçlarını birleştirmek için kullanılır; birleşim farklı modellerden olduğunda alanlar ve veri türlerinin eşleşmesi gerekir.
q1 = Book.objects.filter(available=True)
q2 = Book.objects.exclude(available=True)
q1.union(q2)

Django JOIN Sorguları
Birleştirme, select_related yöntemle yapılabilir: Django bu işlevi, yabancı anahtar ilişkilerini "takip edecek" ve sorgusunu yürütürken ilgili ek nesne verilerini seçecek bir QuerySet döndürür olarak tanımlar.
Book.objects.select_related('category')
Başka bir yol Birleştirmenin başka bir yolu da filtre kullanmaktır: model ilişkisinin adı, ardından çift alt çizgi () ve ardından alanın adı gelir:
`Book.objects.filter(category
name='science')`

Django Aggerations
Bazen bir grup nesneyi eklememiz, saymamız veya bunlardan veri almamız gerekir. Bu, toplamalarla yapılabilir:
from django.db.models import Avg, Max, Min, Sum, Count
Avg: Verilen ifadenin ortalama değerini döndürür
Category.objects.all().aggregate(Avg('id'))
Count: Sağlanan ifadeyle ilişkili nesnelerin sayısını döndürür.
Category.objects.count()

Top comments (0)