Cách sử dụng PostgreSQL trong Django

Trong phần trước đó mình có nói sơ lược cho các bạn cách làm sao để kết nối Django với PostgreSQL và với bài viết hôm nay mình sẽ hướng dẫn thêm cho các bạn sử dụng PostgreSQL trong Django.

Cài đặt kết nối PostgreSQL

Để kết nối PostgreSQL ta dùng tên dịch vụ từ tệp dịch vụ kết nối và mật khẩu từ tệp mật khẩu, bạn phải chỉ định chúng trong phần OPTIONS của cấu hình cơ sở dữ liệu của mình trong DATABASES

.setting.py:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'OPTIONS': {
            'service': 'my_service',
            'passfile': '.my_pgpass',
        },
    }
}

.pg_service.conf:

[my_service]
host=localhost
user=USER
dbname=NAME
port=5432

.my_pgpass:

localhost:5432:NAME:USER:PASSWORD

Tối ưu hóa cấu hình của PostgreSQL

Django cần các tham số sau cho các kết nối cơ sở dữ liệu của nó:

  • Client_encoding: 'UTF8'
  • Default_transaction_isolation: theo mặc định, hoặc giá trị được đặt trong các tùy chọn kết nối
  • Read committed
  • Timezone
  • Nếu các thông số này đã có giá trị chính xác, Django sẽ không đặt chúng cho mọi kết nối mới mà bạn có thể định cấu hình chúng trực tiếp trong postgresql.confhoặc thuận tiện hơn cho mỗi người dùng cơ sở dữ liệu thì sử dụng ALTER ROLE. Django sẽ hoạt động tốt nếu không có sự tối ưu hóa các thông số này, nhưng mỗi kết nối mới sẽ thực hiện một số truy vấn bổ sung để thiết lập các thông số này.

    Một số lưu ý khi sử dụng PostgreSQL trên Django:

    Khi sử dụng QuerySet.iterator(), Django sẽ dùng con trỏ phía máy chủ . Theo mặc định, PostgreSQL giả định rằng chỉ 10% kết quả đầu tiên của các truy vấn con trỏ sẽ được tìm nạp. Người lập kế hoạch truy vấn dành ít thời gian hơn để lập kế hoạch truy vấn và bắt đầu trả về kết quả nhanh hơn, nhưng điều này có thể làm giảm hiệu suất nếu hơn 10% kết quả được truy xuất.

    Tổng hợp giao dịch và con trỏ phía máy chủ: Việc sử dụng trình gộp kết nối trong chế độ tổng hợp giao dịch sẽ yêu cầu tắt con trỏ phía máy chủ cho kết nối đó. Một giải pháp là tắt con trỏ phía máy chủ cho kết nối DATABASESlà bằng cách đặt DISABLE_SERVER_SIDE_CURSORS thành True. Tuy nhiên, bạn có thể thiết lập một kết nối khác với cơ sở dữ liệu để thực hiện các truy vấn sử dụng con trỏ phía máy chủ. Kết nối này cần phải trực tiếp đến cơ sở dữ liệu hoặc tới một trình gộp kết nối ở chế độ gộp phiên.

    Một lưu ý khác là ta sẽ bao mỗi khối QuerySet lại bằng cách sử dụng con trỏ phía máy chủ trong một khối atomic(), vì nó vô hiệu hóa autocommit trong suốt thời gian của giao dịch. Bằng cách này, con trỏ phía máy chủ sẽ chỉ tồn tại trong thời gian của giao dịch.

    Xem lại cách kết nối Django với PostgreSQL tại: Làm sao để kết nối Django và PostgreSQL?
    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---
    3 phút đọc·684 lượt xem·