【问题标题】:Why django_migrations table is created even though router does not allow migrations?为什么即使路由器不允许迁移,也会创建 django_migrations 表?
【发布时间】:2021-02-10 14:01:45
【问题描述】:

我有 'default''secondary' 数据库。为什么,即使是这样说的:

makemigrations always creates migrations for model changes, but if allow_migrate() returns False, any migration operations for the model_name will be silently skipped when running migrate on the db. Changing the behavior of allow_migrate() for models that already have migrations may result in broken foreign keys, extra tables, or missing tables. When makemigrations verifies the migration history, it skips databases where no app is allowed to migrate.

在运行./manage.py migrate --database=secondary 时,我收到所有列为 OK 的迁移,并且django_migrations 表存在于'secondary' 数据库中,而不是没有迁移,也没有跟踪它们。是 Django 设计决定还是我搞砸了路由?

class PrimaryRouter:
    """Primary router allowing ORM operations only on default database"""

    # NOTE: https://docs.djangoproject.com/en/3.1/topics/db/multi-db/#an-example
    def db_for_read(self, model, **hints):
        return 'default'

    def db_for_write(self, model, **hints):
        return 'default'

    def allow_relation(self, obj1, obj2, **hints):
        """
        Relations between objects are allowed if both objects are
        in the primary/replica pool.
        """
        db_set = {'default'}
        if obj1._state.db in db_set and obj2._state.db in db_set:
            return True
        return None

    def allow_migrate(self, db, app_label, model_name=None, **hints):
        """
        All non-auth models end up in this pool.
        """

        return db == 'default'


# settings
DATABASE_ROUTERS = ['app.routers.PrimaryRouter', ]

【问题讨论】:

    标签: django django-migrations


    【解决方案1】:

    是的,这是故意的,因为 documented

    makemigrations 总是为模型更改创建迁移,但如果 allow_migrate() 返回 False,任何迁移操作 model_name 将被静默跳过

    这意味着只有migration operations 会被跳过

    【讨论】:

    • 谢谢你。需要确保这样我就不会弄乱我的数据库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 2019-12-30
    • 2012-07-07
    • 2022-01-14
    • 2010-12-25
    • 2014-12-30
    • 1970-01-01
    相关资源
    最近更新 更多