将现有的Redshift只读数据库连接到Django项目

时间:2019-05-06 10:15:45

标签: django postgresql amazon-redshift

我正在尝试将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时遇到了

  

migrationsschemamissing例外

因为 django_migrations.id 具有不受支持的类型“串行” 。 但是,我认为,由于有了路由器,我避免了在该数据库上进行迁移。

我读到另一篇文章是关于同一主题的,但是没有一个人对此问题给出答案。

您能帮我解决这个问题吗?

谢谢

0 个答案:

没有答案