sql >> Databáze >  >> RDS >> PostgreSQL

Django a postgresql schémata

Protože Django po vybalení nepodporuje databázová schémata Postgres, použijte databázový router, aby to fungovalo.

Vytvořil jsem testovací databázi, se kterou to mohu vyzkoušet, zde je návod, jak ji reprodukovat:

Vytvořte testovací databázi 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
);

Přidejte schémata do nastavení jako různá databázová připojení, nezapomeňte přidat HOST abyste se vyhnuli chybě „Autentizace peer selhala“.

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

}

Dále vytvořte 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'

Vytvořte databázový směrovač, který bude směrovat všechny dotazy související s ukázkou do ukázkové databáze:

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

Router bude v zásadě směrovat všechny modely uvedené v ROUTED_MODELS do databázového připojení samples a u všech ostatních modelů vrátí Žádné. Tím je nasměrujete na default připojení k databázi.

Nakonec přidejte router do souboru settings.py

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

A nyní při zadávání dotazu na MySample model, načte data ze samples schéma.



  1. Protokol transakcí serveru SQL, část 1:Základy protokolování

  2. PostgreSQL - nastavte výchozí hodnotu buňky podle hodnoty jiné buňky

  3. Řádek SQL oddělený čárkami s klauzulí Seskupit podle

  4. Jak spustit uloženou proceduru na serveru SQL každou hodinu?