ORM (Object-Relational Mapping) lets you work with the database through Python objects without writing SQL.
CREATE
# Method 1: create()
task = Task.objects.create(title="Buy milk", status="todo")
# Method 2: save()
task = Task(title="Buy milk", status="todo")
task.save()
# bulk_create — many objects in a single query
Task.objects.bulk_create([
Task(title="Task 1"),
Task(title="Task 2"),
Task(title="Task 3"),
])
READ
Task.objects.all() # all records
Task.objects.get(pk=1) # single record (raises exception if not found)
Task.objects.filter(status='todo') # filter
Task.objects.exclude(status='done') # exclude
Task.objects.first() # first record
Task.objects.last() # last record
Task.objects.count() # count
Task.objects.exists() # bool: any records exist?
Filters (Lookups)
Task.objects.filter(title__contains='milk') # LIKE '%milk%'
Task.objects.filter(title__icontains='milk') # case-insensitive
Task.objects.filter(title__startswith='Buy')
Task.objects.filter(created_at__date=today)
Task.objects.filter(priority__gt=5) # >
Task.objects.filter(priority__gte=5) # >=
Task.objects.filter(priority__lt=10) # <
Task.objects.filter(priority__in=[1, 2, 3]) # IN
Task.objects.filter(description__isnull=True) # IS NULL
UPDATE
# Single object
task = Task.objects.get(pk=1)
task.status = 'done'
task.save()
# Multiple objects (single SQL UPDATE)
Task.objects.filter(status='todo').update(status='in_progress')
DELETE
task = Task.objects.get(pk=1)
task.delete()
# Multiple objects
Task.objects.filter(status='done').delete()
ORDER BY
Task.objects.order_by('title') # ascending
Task.objects.order_by('-created_at') # descending
Task.objects.order_by('status', '-priority') # multiple fields
Chaining QuerySets
# QuerySets are lazy — SQL is executed only on iteration
tasks = (
Task.objects
.filter(status='todo')
.exclude(priority=0)
.order_by('-priority')
[:10] # LIMIT 10
)
💬 Comments (0)
No comments yet
Be the first to share your opinion about this article!