PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Skema Django dan postgresql

Karena Django tidak mendukung skema basis data Postgres di luar kotak, untuk membuatnya bekerja, gunakan perute basis data.

Saya membuat database pengujian untuk mencobanya, berikut cara mereproduksinya:

Buat database pengujian dengan 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
);

Tambahkan skema ke pengaturan sebagai koneksi database yang berbeda, ingatlah untuk menambahkan HOST untuk menghindari kesalahan “otentikasi rekan gagal”.

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

}

Selanjutnya buat 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'

Buat router database untuk mengarahkan semua kueri terkait sampel ke database sampel:

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

Pada dasarnya, router akan merutekan semua model yang ditentukan dalam ROUTED_MODELS ke koneksi database samples dan kembalikan None untuk semua model lainnya. Ini akan mengarahkan mereka ke default koneksi basis data.

Terakhir tambahkan router ke settings.py

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

Dan sekarang saat melakukan kueri untuk MySample model, itu akan mengambil data dari samples skema.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. koneksi lokal docker postgres pgadmin

  2. Bagaimana saya (atau dapatkah saya) SELECT DISTINCT pada beberapa kolom?

  3. Batas ukuran tipe data JSON di PostgreSQL

  4. pg_ctl Tips dan Trik

  5. Hasilkan nilai DEFAULT dalam CTE UPSERT menggunakan PostgreSQL 9.3