PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Django и postgresql схеми

Тъй като Django не поддържа Postgres схеми на база данни от кутията, за да накарате това да работи, използвайте рутер за база данни.

Създадох тестова база данни, за да изпробвам това, ето как да го възпроизведем:

Създайте тестова база данни с 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
);

Добавете схемите към настройките като различни връзки към базата данни, не забравяйте да добавите HOST за да избегнете грешката „Удостоверяването на партньора е неуспешно“.

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'
},

}

След това създайте MySample модел:

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'

Създайте рутер за база данни, за да насочите всички заявки, свързани с извадката, към примерната база данни:

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

По принцип рутерът ще насочва всички модели, посочени в ROUTED_MODELS, към връзката с базата данни samples и върнете None за всички останали модели. Това ще ги насочи към default връзка с базата данни.

Накрая добавете рутера към вашите настройки.py

DATABASE_ROUTERS = ('database_test.db_router.MyDBRouter',)

И сега, когато правите заявка за MySample модел, той ще извлича данни от samples схема.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да импортирам .sql файл в моята Heroku postgres база данни?

  2. Уникално ограничение на Postgres спрямо индекс

  3. Размер на таблицата на дяловете в PostgreSQL 9.0

  4. Postgres:дефиниране на стойност по подразбиране за CAST неуспехи?

  5. Как да промените типа данни на колона от символен към числов в PostgreSQL 8.4