0

Kết nối Django với database

image.png

Tìm hiểu về cấu hình Database

  • Trong file settings.py có tùy chọn về DATABASES

    DATABASES = {
        "default": {
            "ENGINE": "django.db.backends.sqlite3",
            "NAME": "mydatabase",
        }
    }
    
  • Về mặc định Django sẽ kết nối với Sqlite3 với engine'django.db.backends.sqlite3'


Giải thích về tùy chọn DATABASES

Về cơ bản DATABASES là một dict

  • key là tên của database, mặc định là default. Nó dùng trong DB routing (mình sẽ có bài viết về nó sau)

  • value là cấu hình của nó

    • ENGINE là loại database kết nối. Hiện tại Django hỗ trợ các loại database sau:

      • PostgreSQL: 'django.db.backends.postgresql'. Yêu cầu thư viện psycopg2-binary
      • MySQL: 'django.db.backends.mysql'. Yêu cầu thư viện mysqlclient
      • SQLite3: 'django.db.backends.sqlite3'
      • Oracle: 'django.db.backends.oracle'. Yêu cầu thư viện cx_Oracle
    • HOST cấu hình địa chỉ máy chủ cơ sở dữ liệu

      • Mặc định là chuỗi rỗng ➡️ kết nối đến SQLite3
    • PORT cấu hình kết nối cổng của cơ sở dữ liệu

    • USER cấu hình tên đăng nhập của cơ sở dữ liệu

    • PASSWORD cấu hình mật khẩu đăng nhập cơ sở dữ liệu

    • NAME tên của cơ sở dữ liệu

      • Khi dùng SQLite3 nó là đường dẫn của file Sqlite
    • Ngoài ra bạn có thể cấu hình kết nối database khi chạy test tại đây bằng tùy chọn TEST


Ví dụ về cấu hình DATABASES

  • Ví dụ kết nối đến PostgreSQL, với host là localhost, port 5432, username postgres, password postgres và tên database là data

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql',
            'HOST': 'localhost',
            'PORT': 5432,
            'USER': 'postgres',
            'PASSWORD': 'postgres',
            'NAME': 'data',
        }
    }
    
  • Ngoài ra bạn có thể kết hợp với bài viết Đọc file biến môi trường - Environment file (.env) bằng Python để tăng bảo mật cũng như về mặt làm sạch code.


Tài liệu tham khảo


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.