PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Schematy Django i postgresql

Ponieważ Django nie obsługuje schematów baz danych Postgres po wyjęciu z pudełka, aby to zadziałało, użyj routera bazy danych.

Stworzyłem testową bazę danych, aby to wypróbować, oto jak ją odtworzyć:

Utwórz testową bazę danych za pomocą 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
);

Dodaj schematy do ustawień jako różne połączenia z bazą danych, pamiętaj, aby dodać HOST aby uniknąć błędu „Uwierzytelnianie równorzędne nie powiodło się”.

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

}

Następnie utwórz MySample model:

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'

Utwórz router bazy danych, aby kierować wszystkie zapytania związane z próbkami do przykładowej bazy danych:

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

Zasadniczo router skieruje wszystkie modele określone w ROUTED_MODELS do połączenia z bazą danych samples i zwróć Brak dla wszystkich pozostałych modeli. To przekieruje je do default połączenie z bazą danych.

Na koniec dodaj router do ustawień.py

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

A teraz, gdy wykonujesz zapytanie dla MySample model, pobierze dane z samples schemat.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przekonwertować dostęp do PostgreSQL?

  2. Jak zmienić formatowanie moich wartości zwracanych w tej funkcji?

  3. Plik ~/.psqlrc dla DBA

  4. Lista kolumn z indeksami w PostgreSQL

  5. Jak uzyskać aktualną datę i godzinę (bez strefy czasowej) w PostgreSQL?