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

Nad*_*ari 7 python django configuration database-migration multiple-databases

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

  • 预期数据库内容:

    AppDB表是此应用程序定义的所有模型

    默认数据库表都是Django表(admin,contenttypes,auth,sessions)

  • 数据库内容:

    AppDB表是此app + django_migrations定义的所有模型

    DEFAULT表都是Django表(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
Run Code Online (Sandbox Code Playgroud)

谢谢.

Kev*_*nry 2

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

\n\n

现在,如果您有一个实际上不需要迁移的表\xe2\x80\x94,例如只读数据库\xe2\x80\x94,那么这可能会导致问题。这就是这张票的主题的主题。

\n