Sau hơn 17 năm, tác giả Andi Albrecht tuyên bố ngừng bảo trì sqlparse — thư viện phân tích SQL mà Django dùng từ nhiều năm nay. Phiên bản 0.6.1, phát hành ngày 1/11/2026, là bản cuối cùng: không còn sửa lỗi hay vá bảo mật nữa. Tin tốt là Django không bị ảnh hưởng ngay — các gói trên PyPI vẫn tồn tại, và nhóm Steering Council khẳng định Django an toàn cho chu kỳ 6.2, còn đủ thời gian tìm hướng thay thế trước Django 2028.
sqlparse là một dependency thầm lặng: bạn hiếm khi gọi nó trực tiếp, nhưng nó nằm sau nhiều thao tác quen thuộc của Django.
Chuyện gì đã xảy ra?
Ngày 1/11/2026, Andi Albrecht đăng thông báo trên Django Forum và GitHub Discussion #945: sau hơn 17 năm, ông dừng bảo trì sqlparse. Bản 0.6.1 là bản cuối cùng — không còn sửa lỗi, tính năng mới hay cập nhật bảo mật. Mã nguồn và mọi bản phát hành vẫn còn trên GitHub và PyPI, nhưng ông sẽ không chuyển quyền sở hữu hay quyền phát hành cho ai, vì lý do an toàn chuỗi cung ứng.
Lý do trực tiếp là làn sóng advisory bảo mật: suốt sáu tháng qua, báo cáo đổ về vài lần mỗi tuần, bản 0.6.0 vừa vá xong một loạt thì loạt mới lại tới ngay. Nhiều báo cáo là lỗi thường bị gắn mác advisory, trùng lặp, hoặc đã sửa từ trước; số khác chỉ ra điểm yếu kỹ thuật nhưng không chứng minh được rủi ro thực tế.
Django dùng sqlparse ở đâu?
Trong Django, sqlparse chỉ xuất hiện ở ba nơi: câu lệnh RunSQL trong migrations, lệnh inspectdb và phần in câu SQL ra trong test runner.
Đại diện Steering Council, Carlton Gibson, trả lời ngay trong thread: Django ổn cho chu kỳ 6.2 sắp tới, và nhóm có đủ thời gian xử lý dài hạn trước Django 2028, dự kiến tháng 1/2028. Các vị trí dùng sqlparse đều không phải attack vector khả thi trên production, nên không có áp lực phải vá gấp.
Một số hướng đã được nhắc tới: cộng đồng nhận lại dự án, fork, viết lại một bản nhỏ chỉ gồm đúng phần Django dùng, hoặc dựa vào một Rust crate. Chưa có quyết định nào — còn quá sớm.
Điều này có ý nghĩa gì với bạn
Nếu bạn chỉ dùng Django theo cách thông thường, bạn không cần làm gì ngay: không cần gỡ sqlparse, không cần đổi migrations. Việc thư viện ngừng vá bảo mật nghe đáng sợ, nhưng rủi ro thực tế gần như bằng không, vì Django không dùng nó để xử lý SQL không tin cậy.
Chỉ khi bạn dùng sqlparse trực tiếp để parse hay format SQL từ người dùng, bạn mới cần xem lại thiết kế: thư viện này chưa bao giờ là ranh giới bảo mật, và ứng dụng của bạn cần biện pháp bảo vệ riêng.
Bài viết liên quan
- Django vá 6 lỗ hổng bảo mật trong bản 6.1.3, 6.0.10 và 5.2.19: nâng cấp ngay hôm nay
- Django “khai tử” bản LTS: từ 2028, mỗi năm một phiên bản, đánh số theo năm
Câu hỏi thường gặp
sqlparse là gì và Django dùng nó để làm gì?
sqlparse là thư viện Python phân tích và định dạng SQL. Django dùng nó trong RunSQL migrations, inspectdb và khi in SQL trong test runner.
Dự án của tôi có bị ảnh hưởng ngay không?
Không. Gói 0.6.1 vẫn nằm trên PyPI và hoạt động bình thường. Django khẳng định an toàn cho chu kỳ 6.2, và bạn không cần thay đổi gì trong dự án hiện tại.
Django sẽ thay sqlparse bằng gì?
Chưa có quyết định. Các hướng đang bàn gồm nhận lại dự án, fork, viết lại phần nhỏ Django cần, hoặc dùng Rust crate — mọi phương án đều còn sớm và sẽ được cân nhắc trước Django 2028.
💬 Tin này ảnh hưởng tới dự án của bạn thế nào? Chia sẻ góc nhìn của bạn trong phần bình luận — mình đọc hết và sẽ tổng hợp những ý hay nhất.
Nguồn tham khảo
- Django Forum: sqlparse is no longer maintained – implications for Django: https://forum.djangoproject.com/t/sqlparse-is-no-longer-maintained-implications-for-django/46346
- GitHub: Closing sqlparse (Discussion #945): https://github.com/andialbrecht/sqlparse/discussions/945
