Django

Django ORM nâng cao

Raw SQL, custom managers, query expressions, database functions, atomic transactions, select_for_update, race conditions, database routers

28 câu hỏi phỏng vấn·
Senior
1

Sự khác biệt chính giữa Model.objects.raw() và connection.cursor() khi thực thi raw SQL trong Django là gì?

Câu trả lời

Model.objects.raw() trả về các instance model được ánh xạ tự động, giữ lại các lợi ích của ORM như truy cập thuộc tính và quan hệ. connection.cursor() trả về một cursor cơ sở dữ liệu thô với tuple, cung cấp sự linh hoạt hơn cho các truy vấn không gắn với một model cụ thể, nhưng yêu cầu xử lý kết quả thủ công.

2

Lợi thế chính của việc tạo một custom Manager trong Django thay vì thêm phương thức trực tiếp vào model là gì?

Câu trả lời

Một custom Manager đóng gói logic truy vấn ở cấp bảng, cho phép chuỗi phương thức với QuerySet và tái sử dụng logic này ở mọi nơi model được dùng. Các phương thức model hoạt động trên từng instance riêng lẻ. Manager cũng cho phép sửa đổi QuerySet mặc định bằng get_queryset().

3

Làm thế nào để triển khai một custom QuerySet nhằm cho phép chuỗi các phương thức tùy chỉnh trong Django?

Câu trả lời

Để cho phép chuỗi, hãy tạo một lớp kế thừa từ QuerySet với các phương thức trả về self hoặc một QuerySet đã lọc. Sau đó dùng custom QuerySet thông qua Manager.from_queryset() hoặc định nghĩa một Manager tùy chỉnh với get_queryset() trả về custom QuerySet. Điều này cho phép gọi Model.objects.custom_method().filter().

4

Nên dùng biểu thức Django nào để tăng một bộ đếm trong cơ sở dữ liệu một cách nguyên tử mà không có nguy cơ race condition?

5

Chức năng của transaction.atomic() là gì và nó xử lý các exception trong Django như thế nào?

+25 câu hỏi phỏng vấn

Nắm vững Django cho lần phỏng vấn tiếp theo

Truy cập tất cả câu hỏi, flashcards, bài kiểm tra kỹ thuật, bài tập code review và mô phỏng phỏng vấn.

Bắt đầu miễn phí