Подключите существующую базу данных Redshift только для чтения к проекту Django - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь подключить мое приложение django к третьей базе данных, где мне нужно получить некоторые данные. Я буду использовать эту информацию только для чтения. Я сделал эти конфигурации:

settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'xxx',
        'USER':'xxx',
        'PASSWORD':'xxx',
        'HOST':'xxx',
        'PORT':'5432',
    },
    'histo':{
        'ENGINE':'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR,'db.sqlite3'),
    },
    'redshift': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'xxx',
        'USER':'xxx',
        'PASSWORD':'xxx',
        'HOST':'xxx',
        'PORT':'5439', 
    }
}

DATABASE_ROUTERS = ['livedb.database_routers.redshiftrouter.Router']

И написал этот роутер:

redshiftrouter.py

class Router(object):

    def db_for_read(self, model, **hints):
        if model._meta.app_label == 'redshift':
            return 'redshift'
        return None

    def db_for_write(self, model, **hints):
        if model._meta.app_label == 'redshift':
            return 'redshift'
        return None

    def allow_relation(self, obj1, obj2, **hints):
        if obj1._meta.app_label == 'redshift' or \
           obj2._meta.app_label == 'redshift':
           return True
        return None

    def allow_migrate(self, db, app_label, model=None, **hints):
        if app_label == 'redshift':
            return False
        return None

Моя проблема в том, что когда я бегу manage.py migrate --database=redshift, у меня появляется

миграция, исключая исключение

Поскольку django_migrations.id имеет неподдерживаемый тип 'serial' . Однако я подумал, что благодаря моему маршрутизатору я избежал перехода на эту базу данных.

Я читал, что другой пост был на ту же тему, но никто из них не дал ответа на этот вопрос.

Можете ли вы помочь мне с этой проблемой?

Спасибо

...