×

Sử dụng Django ORM để truy vấn và quản lý dữ liệu trong Python

Django ORM (Object-Relational Mapping) là một phần quan trọng trong framework Django, giúp lập trình viên tương tác và quản lý cơ sở dữ liệu một cách dễ dàng và hiệu quả thông qua mã Python thay vì SQL. Việc sử dụng ORM giúp bảo vệ code trước các lỗi SQL injection, đồng thời cung cấp một API trực quan và mạnh mẽ.

Những khái niệm cơ bản của Django ORM

1. Mô hình (Model)

Models trong Django là cách bạn định nghĩa cấu trúc dữ liệu. Mỗi model tương ứng với một bảng trong cơ sở dữ liệu và mỗi thuộc tính của model tương ứng với một cột trong bảng đó.

from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)
    birth_date = models.DateField()

class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    published_date = models.DateField()

Trong ví dụ trên, chúng ta có hai model AuthorBook. Author có các thuộc tính namebirth_date, trong khi Book có các thuộc tính title, author, và published_date.

2. Migration

Sau khi tạo hoặc cập nhật model, bạn cần tạo và áp dụng migration để thay đổi cấu trúc cơ sở dữ liệu:

python manage.py makemigrations
python manage.py migrate

3. Truy vấn cơ bản

Django ORM cho phép bạn thực hiện các truy vấn cơ sở dữ liệu thông qua các phương thức của model.

  • Tạo đối tượng
new_author = Author(name='Jane Austen', birth_date='1775-12-16')
new_author.save()
  • Lấy đối tượng
author = Author.objects.get(name='Jane Austen')
  • Lấy tất cả đối tượng
all_authors = Author.objects.all()
  • Lọc đối tượng
recent_books = Book.objects.filter(published_date__year__gte=2000)

4. Truy vấn nâng cao

Django ORM hỗ trợ nhiều phương thức truy vấn nâng cao, giúp bạn làm việc với dữ liệu một cách linh hoạt.

  • Sắp xếp dữ liệu
books_ordered_by_date = Book.objects.order_by('published_date')
  • Giới hạn kết quả
top_5_books = Book.objects.all()[:5]
  • Đếm số lượng bản ghi
num_authors = Author.objects.count()
  • Tổng hợp dữ liệu
from django.db.models import Avg
average_books_per_author = Author.objects.annotate(Avg('book__id'))

5. Quan hệ giữa các model

Django hỗ trợ các loại quan hệ như One-to-One, One-to-Many, và Many-to-Many.

  • One-to-Many
class Publisher(models.Model):
    name = models.CharField(max_length=100)

class Book(models.Model):
    title = models.CharField(max_length=200)
    publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE)
  • Many-to-Many
class Book(models.Model):
    title = models.CharField(max_length=200)
    authors = models.ManyToManyField(Author)

6. Phương thức quản lý tùy chỉnh

Bạn có thể thêm các phương thức quản lý tùy chỉnh cho model của mình bằng cách mở rộng Manager.

class BookManager(models.Manager):
    def published_this_year(self):
        return self.filter(published_date__year=timezone.now().year)

class Book(models.Model):
    title = models.CharField(max_length=200)
    published_date = models.DateField()
    objects = BookManager()

Sử dụng Django ORM giúp tăng hiệu suất lập trình, giảm rủi ro lỗi, và tăng cường tính bảo mật. Với khả năng tương tác dễ dàng và mạnh mẽ, ORM là công cụ không thể thiếu đối với bất kỳ dự án Django nào. Việc hiểu rõ và tận dụng tối đa các tính năng của ORM sẽ giúp bạn xây dựng các ứng dụng web nhanh chóng, an toàn và dễ bảo trì.

Comments