python - 为什么 django_migrations 表在所有数据库中

标签 python django configuration database-migration multiple-databases

我在 Django 框架下建立一个网站,这个网站需要有不同的 SQL 方案,现在我成功地创建了所有方案和所有东西,但我不明白为什么迁移后每个模式中都有表 django_migrations数据库。

  • 预期的数据库内容:

    AppDB tables are all the models defined by this app

    Default DB tables are all Django tables (admin, contenttypes, auth, sessions)

  • 数据库内容:

    AppDB tables are all the models defined by this app + django_migrations

    DEFAULT tables are all Django tables (admin, contenttypes, auth, sessions) + django_migrations

那些是 2 个 dbs 的路由器:

class DefaultRouter(object):
    APPS = ['auth', 'sessions', 'admin', 'contenttypes']
    DB = 'default'

    def db_for_read(self, model, **hints):
        if model._meta.app_label in self.APPS:
            return self.DB
        return None

    def db_for_write(self, model, **hints):

        if model._meta.app_label in self.APPS:
            return self.DB

        return None

    def allow_relation(self, obj1, obj2, **hints):

        if obj1._meta.app_label in self.APPS or obj2._meta.app_label in self.APPS:
            return True
        return None

    def allow_migrate(self, db, app_label, model_name=None, **hints):

        if app_label in self.APPS:
            return db == self.DB
        return None


class MyAppDBRouter(object):
    def db_for_read(self, model, **hints):
        return self.check_app_label(model)

    def db_for_write(self, model, **hints):
        return self.check_app_label(model)

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

    def allow_migrate(self, db, app_label, model_name=None, **hints):
        if app_label == 'myapp':
            return db == 'appdb'
        return None

    @staticmethod
    def check_app_label(model):
        if model._meta.app_label == 'myapp':
            return 'appdb'
        return None

谢谢。

最佳答案

django_migrations 表记录了哪些迁移已应用于该数据库。它是 Django 迁移系统了解数据库当前状态以及需要运行哪些迁移的机制。所以所有数据库都需要它。

现在,如果您有一个实际上不需要迁移的表——比如说,一个只读数据库——那么这可能会导致问题。这就是 this ticket 的主题.

关于python - 为什么 django_migrations 表在所有数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36895063/

相关文章:

python - 如何将 mnist 数据转换为 RGB 格式?

django - 如何使用 {format} drf-yasg 排除请求?

Django 测试客户端忽略 Django 模板中的 "include"项

django - 如何在 Django 数组字段中执行全文搜索

python - 通过配置文件创建函数实例

configuration - 本地 NServicebus 发布到 Azure 队列

python - 使用您自己保存的模型在 Keras 中进行迁移学习

python - Sonar Python 覆盖率报告问题

python - 无法从 python 客户端插入 crateb

python - Windows 中放置用户配置文件的位置