Làm việc với cơ sở dữ liệu trong Django

Bất kể ứng dụng nào thì cũng cần có một cơ sở dữ liệu để lưu trữ và truy cập thông tin, đối với Django cũng hỗ trợ cho bạn các cơ sở dữ liệu để xây dựng những ứng dụng web. Bài viết hôm nay sẽ trình bày một số vấn đề về cơ sở dữ liệu trong Django.

Các cơ sở dữ liệu được Django hỗ trợ:

Trong Django hỗ trợ các database chính là: PostgreSQL, MySQL, Oracle, SQLite, MariaDB. Ngoài ra còn có một số phụ trợ cơ sở dữ liệu được cung cấp bởi các bên thứ ba. Django cố gắng hỗ trợ nhiều tính năng nhất có thể trên tất cả các phần phụ trợ của cơ sở dữ liệu. Tuy nhiên, không phải tất cả các phần mềm phụ trợ cơ sở dữ liệu đều giống nhau.

Kết nối cơ sở dữ liệu trong Django:

Các kết nối liên tục: Các kết nối liên tục tránh được chi phí thiết lập lại kết nối với cơ sở dữ liệu trong mỗi yêu cầu. Các kết nối được kiểm soát bởi CONN_MAX_AGE - đây là tham số xác định thời gian tồn tại tối đa của kết nối và nó có thể được thiết lập độc lập cho mỗi cơ sở dữ liệu. Giá trị mặc định cho CONN_MAX_AGE bằng 0 do đó để kích hoạt kết nối liên tục thì hãy đặt giá trị CONN_MAX_AGE thành một số nguyên dương, và cuối cùng khi muốn các kết nối liên tục thì chọn chế độ none.

Quản lý kết nối:

Tại Django sẽ mở một kết nối đến cơ sở dữ liệu ngay lần đầu tiên nó thực hiện một truy vấn cơ sở dữ liệu. Nó giữ cho kết nối này mở và sử dụng lại kết nối này trong các yêu cầu tiếp theo. Django đóng kết nối khi nó vượt quá giá trị tối đa của tham số CONN_MAX_AGEhoặc khi nó không thể sử dụng được nữa.

Cụ thể, Django tự động mở kết nối bất cứ khi nào nó cần nếu như chưa có sẵn kết nối đến cơ sở dữ liệu. Khi bắt đầu mỗi yêu cầu, Django sẽ đóng kết nối nếu kết nối đó đã vượt qua giá trị của CONN_MAX_AGE. Bên cạnh đó thì chúng ta sẽ có sự cố với các trang web có lưu lượng truy cập thấp nếu cơ sở dữ liệu ngắt các kết nối không hoạt động sau một thời gian. Nếu như vậy thì Django sẽ cố gắng sử dụng các kết nối đã bị máy chủ của cơ sở dữ liệu ngắt kết nối vì lúc đó giá trị của chúng ta chưa vượt qua CONN_MAX_AGE . Vì vậy, nên đặt CONN_MAX_AGE có giá trị thấp hơn, vừa phải để không gây ra lỗi.

Vào cuối mỗi yêu cầu, Django đóng kết nối nếu nó đã đạt đến giá trị tối đa hoặc nếu nó ở trạng thái lỗi không thể khôi phục. Nếu bất kỳ lỗi cơ sở dữ liệu nào đã xảy ra trong khi xử lý các yêu cầu, Django sẽ kiểm tra xem kết nối có còn hoạt động hay không và đóng nó nếu cơ sở dữ liệu không còn hoạt động. Ngoài ra, cài đặt CONN_HEALTH_CHECKS thành True có thể được sử dụng để cải thiện độ mạnh mẽ của việc tái sử dụng kết nối và ngăn ngừa lỗi khi máy chủ cơ sở dữ liệu đã đóng kết nối.

Một số chú ý về cơ sở dữ liệu:

  • Nên chú ý mỗi luồng sẽ duy trì kết nối riêng của nó, cơ sở dữ liệu của bạn phải hỗ trợ ít nhất nhiều kết nối đồng thời và đôi khi một cơ sở dữ liệu sẽ không được truy cập nhiều. Trong những trường hợp như vậy, ta nên đặt `CONN_MAX_AGE` giá trị thấp hoặc thậm chí là bằng 0, bởi vì việc duy trì một kết nối xác suất được sử dụng lại thấp. Điều này sẽ giúp giảm số lượng kết nối đồng thời đến cơ sở dữ liệu, tăng độ ổn định.
  • Thường máy chủ phát triển sẽ tạo một luồng mới cho mỗi yêu cầu mà nó xử lý bỏ qua các kết nối liên tục vậy nên đừng kích hoạt chúng trong quá trình phát triển.
  • Khi Django thiết lập kết nối với cơ sở dữ liệu, nó sẽ thiết lập các tham số thích hợp, tùy thuộc vào phần phụ trợ đang được sử dụng. Nếu bạn bật kết nối liên tục, thiết lập này sẽ không còn lặp lại mọi yêu cầu nữa.
  • Mã hóa cơ sở dữ liệu:

    Trong Django giả định rằng tất cả cơ sở dữ liệu đều sử dụng mã hóa UTF-8. Việc sử dụng các mã hóa khác có thể dẫn đến hành vi không mong muốn, chẳng hạn như lỗi "giá trị quá dài" từ cơ sở dữ liệu của bạn không đúng với dữ liệu hợp lệ trong Django.

    Nguồn: django tutorial

    Công nghệ được nhắc đến trong bài viết này

    Tên Công NghệPhiên BảnPhát Hành
    Django---
    PostgreSQL---
    5 phút đọc·1,287 lượt xem·