sql >> Database teknologi >  >> RDS >> PostgreSQL

Django og postgresql skemaer

Fordi Django ikke understøtter Postgres-databaseskemaer ud af boksen, skal du bruge en databaserouter for at få dette til at fungere.

Jeg har oprettet en testdatabase for at prøve dette ud med, her er hvordan man gengiver den:

Opret en testdatabase med 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
);

Tilføj skemaerne til indstillingerne som forskellige databaseforbindelser, husk at tilføje HOST for at undgå fejlen "Peer-godkendelse mislykkedes".

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

}

Opret derefter 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'

Opret en databaserouter for at dirigere alle prøverelaterede forespørgsler til prøvedatabasen:

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

Grundlæggende vil routeren dirigere alle modellerne specificeret i ROUTED_MODELS til databaseforbindelsen samples og returner Ingen for alle de andre modeller. Dette vil dirigere dem til default databaseforbindelse.

Tilføj endelig routeren til din settings.py

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

Og nu, når du laver en forespørgsel efter MySample model, vil den hente data fra samples skema.



  1. Kan ikke installere pg gem på Mountain Lion

  2. XML-tabel med Oracle 11g

  3. Funktion til at beregne median i SQL Server

  4. Skal nulstille værdien af ​​sekvens i Oracle