SELECT * FROM Person;persons = Person.objects.all()
for person in persons:
print(person.name)
print(person.gender)
print(person.age)SELECT name, age FROM Person;Person.objects.only('name', 'age')SELECT DISTINCT name, age FROM Person;Person.objects.values('name', 'age').distinct()SELECT * FROM Person LIMIT 10;Person.objects.all()[:10]SELECT * FROM Person OFFSET 5 LIMIT 5;Person.objects.all()[5:10]SELECT * FROM Person WHERE id = 1;Person.objects.filter(id=1)WHERE age > 18;
WHERE age >= 18;
WHERE age < 18;
WHERE age <= 18;
WHERE age != 18;Person.objects.filter(age__gt=18)
Person.objects.filter(age__gte=18)
Person.objects.filter(age__lt=18)
Person.objects.filter(age__lte=18)
Person.objects.exclude(age=18)SELECT * FROM Person WHERE age BETWEEN 10 AND 20;Person.objects.filter(age__range=(10, 20))WHERE name like '%A%';
WHERE name like binary '%A%';
WHERE name like 'A%';
WHERE name like binary 'A%';
WHERE name like '%A';
WHERE name like binary '%A';Person.objects.filter(name__icontains='A')
Person.objects.filter(name__contains='A')
Person.objects.filter(name__istartswith='A')
Person.objects.filter(name__startswith='A')
Person.objects.filter(name__iendswith='A')
Person.objects.filter(name__endswith='A')WHERE id in (1, 2);Person.objects.filter(id__in=[1, 2])WHERE gender='male' AND age > 25;Person.objects.filter(gender='male', age__gt=25)WHERE gender='male' OR age > 25;from django.db.models import Q
Person.objects.filter(Q(gender='male') | Q(age__gt=25))WHERE NOT gender='male';Person.objects.exclude(gender='male')WHERE age is NULL;
WHERE age is NOT NULL;Person.objects.filter(age__isnull=True)
Person.objects.filter(age__isnull=False)# Alternate approach
Person.objects.filter(age=None)
Person.objects.exclude(age=None)SELECT * FROM Person order by age;Person.objects.order_by('age')SELECT * FROM Person ORDER BY age DESC;Person.objects.order_by('-age')INSERT INTO Person VALUES ('Jack', '23', 'male');Person.objects.create(name='jack', age=23, gender='male)UPDATE Person SET age = 20 WHERE id = 1;person = Person.objects.get(id=1)
person.age = 20
person.save()UPDATE Person SET age = age * 1.5;from django.db.models import F
Person.objects.update(age=F('age')*1.5)DELETE FROM Person;Person.objects.all().delete()DELETE FROM Person WHERE age < 10;Person.objects.filter(age__lt=10).delete()SELECT MIN(age) FROM Person;from django.db.models import Min
Person.objects.all().aggregate(Min('age'))
{'age__min': 0}SELECT MAX(age) FROM Person;>>> from django.db.models import Max
>>> Person.objects.all().aggregate(Max('age'))
{'age__max': 100}SELECT AVG(age) FROM Person;>>> from django.db.models import Avg
>>> Person.objects.all().aggregate(Avg('age'))
{'age__avg': 50}SELECT SUM(age) FROM Person;>>> from django.db.models import Sum
>>> Person.objects.all().aggregate(Sum('age'))
{'age__sum': 5050}SELECT COUNT(*) FROM Person;Person.objects.count()SELECT gender, COUNT(*) as count FROM Person GROUP BY gender;Person.objects.values('gender').annotate(count=Count('gender'))SELECT gender, COUNT('gender') as count FROM Person GROUP BY gender HAVING count > 1;Person.objects.annotate(count=Count('gender'))
.values('gender', 'count')
.filter(count__gt=1)class Publisher(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE)SELECT name
FROM Book
LEFT JOIN Publisher
ON Book.publisher_id = Publisher.id
WHERE Book.id=1;book = Book.objects.select_related('publisher').get(id=1)
book.publisher.nameSELECT *
FROM Book
WHERE Book.publisher_id = 1;publisher = Publisher.objects.prefetch_related('book_set').get(id=1)
books = publisher.book_set.all()