PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Lược đồ Django và postgresql

Bởi vì Django không hỗ trợ lược đồ cơ sở dữ liệu Postgres, nên để làm cho điều này hoạt động, hãy sử dụng bộ định tuyến cơ sở dữ liệu.

Tôi đã tạo một cơ sở dữ liệu thử nghiệm để dùng thử điều này, sau đây là cách tạo lại nó:

Tạo cơ sở dữ liệu thử nghiệm với psql:

CREATE USER tester WITH PASSWORD 'lol so easy';
CREATE DATABASE multi_schema_db WITH OWNER tester;
CREATE SCHEMA samples AUTHORIZATION tester;
CREATE TABLE samples.my_samples (
  id          INTEGER   NOT NULL PRIMARY KEY,
  description CHAR(255) NOT NULL
);

Thêm các lược đồ vào cài đặt dưới dạng các kết nối cơ sở dữ liệu khác nhau, hãy nhớ thêm HOST để tránh lỗi "Xác thực ngang hàng không thành công".

DATABASES = {

'default': {
    'ENGINE': 'django.db.backends.postgresql_psycopg2',
    'OPTIONS': {
        'options': '-c search_path=django,public'
    },
    'NAME': 'multi_schema_db',
    'USER': 'tester',
    'PASSWORD': 'lol so easy',
    'HOST': 'localhost'

},

'samples': {
    'ENGINE': 'django.db.backends.postgresql_psycopg2',
    'OPTIONS': {
        'options': '-c search_path=samples,public'
    },
    'NAME': 'multi_schema_db',
    'USER': 'tester',
    'PASSWORD': 'lol so easy',
    'HOST': 'localhost'
},

}

Tiếp theo, tạo MySample mô hình:

from django.db import models

class MySample(models.Model):
    description = models.CharField(max_length=255, null=False)

    class Meta:
        managed = False
        db_table = 'my_samples'

Tạo bộ định tuyến cơ sở dữ liệu để hướng tất cả các truy vấn liên quan đến mẫu đến cơ sở dữ liệu mẫu:

from database_test.models import MySample

ROUTED_MODELS = [MySample]


class MyDBRouter(object):

    def db_for_read(self, model, **hints):
        if model in ROUTED_MODELS:
            return 'samples'
        return None

    def db_for_write(self, model, **hints):
        if model in ROUTED_MODELS:
            return 'samples'
        return None

Về cơ bản, bộ định tuyến sẽ định tuyến tất cả các mô hình được chỉ định trong ROUTED_MODELS đến kết nối cơ sở dữ liệu samples và trả về Không có cho tất cả các mô hình khác. Điều này sẽ định tuyến chúng đến default kết nối cơ sở dữ liệu.

Cuối cùng, thêm bộ định tuyến vào settings.py

của bạn
DATABASE_ROUTERS = ('database_test.db_router.MyDBRouter',)

Và bây giờ khi thực hiện truy vấn cho MySample mô hình, nó sẽ tìm nạp dữ liệu từ samples lược đồ.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bảng và chỉ mục so với HDD và SSD

  2. chuỗi postgresql nextval trong giản đồ

  3. Khóa ngoại PostgreSQL không tồn tại, vấn đề kế thừa?

  4. Date_trunc của PostgreSQL trong mySQL

  5. Postgres Left Tham gia với điều kiện ở đâu