【问题标题】:Prevent test migrations from being run on a specific database防止在特定数据库上运行测试迁移
【发布时间】:2018-09-10 10:45:12
【问题描述】:

我有一个 Django 应用程序连接到 2 个数据库。 它们都被 Django 视为 PostgreSQL 数据库,但其中一个不是 PostgreSQL(但使用 PostgreSQL 二进制协议,因此它使用相同的驱动程序 (CockroachDB)。

目前看来,在测试运行期间,Django 尝试在两个数据库上运行迁移。

我怎样才能避免这种情况?我仍然需要在测试期间可以访问数据库,但不需要运行迁移(因为它现在不兼容,并且迁移是在 Django 外部运行的)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',

         ...
    },
    'livedb': {
        'ENGINE': 'django.db.backends.postgresql',
         ...
    }
}

【问题讨论】:

  • 如果它使用的是postgres驱动,但住在不同的地方,你能不能不只是设置不同的主机、用户和密码?
  • 它们已经不同了,但是 Django 正在尝试在两个数据库上运行迁移以进行测试,这在这种情况下不起作用(因为 CockroachDB 不支持与 PostgreSQL 相同级别的 SQL)

标签: django cockroachdb


【解决方案1】:

您可以添加防止迁移的database router。假设 livedb 是您不想迁移的数据库,它看起来像这样:

class LiveDBRouter:

    def allow_migrate(self, db, app_label, model_name=None, **hints):
        """
        Do not allow migrations on livedb.
        """
        return db != 'livedb'

然后你配置那个路由器:

DATABASE_ROUTERS = ['path.to.LiveDBRouter']

【讨论】:

  • 谢谢,我刚刚尝试过,但运行测试时似乎忽略了此设置?即使在定义并设置 DATABASE_ROUTERS 之后,它也会继续尝试创建数据库
猜你喜欢
  • 1970-01-01
  • 2018-04-13
  • 1970-01-01
  • 2012-03-21
  • 1970-01-01
  • 2019-11-15
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
相关资源
最近更新 更多