【问题标题】:Check if merge migration is required, without database检查是否需要合并迁移,无需数据库
【发布时间】:2018-02-20 01:42:50
【问题描述】:

要检查是否需要合并迁移,我可以运行 manage.py makemigrations --checkmanage.py makemigrations --dry-run

但是,这两个都需要数据库启动。如果它没有启动,它会出现类似的错误

django.db.utils.OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)")

理论上,由于同一父级的两次迁移会发生合并迁移问题,因此您不需要数据库实例启动来检查这种情况。

我需要这个,因为我希望我的 CI 来检查这种情况。我可以启动一个 docker 数据库,但对于甚至在逻辑上不依赖的东西来说,这是额外的工作。我也确信有些人有兴趣在他们的 CI 中检查这个,他们不想处理容器化。

有没有人找到一种无需启动数据库即可检查迁移合并冲突的简单方法?

【问题讨论】:

    标签: python django django-migrations


    【解决方案1】:

    由于目标是在不启动 mysql 数据库的情况下运行 makemigrations --dry,因此我想出的最简单的解决方法是创建一个名为 makemigrations_settings.py 的新设置文件,它会覆盖数据库以使用内置的 sqlite 数据库。

    from your_main_settings import *
    DATABASES = {
        'default' : {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': 'database_name',
            'USER': 'your_mom',
            'PASSWORD': '',
            'HOST': '',
            'PORT': '',
        },
    }
    

    然后就可以运行了

    python manage.py makemigrations --check --settings yourapp.makemigrations_settings
    

    或者,你可以不那么优雅地做一些像

    if (sys.argv[0:2] == ['manage.py', 'makemigrations']
        and ('--dry-run' in sys.argv or '--check' in sys.argv)):
                DATABASES = {
                    'default' : {
                        'ENGINE': 'django.db.backends.sqlite3',
                        'NAME': 'database_name',
                        'USER': 'your_mom',
                        'PASSWORD': '',
                        'HOST': '',
                        'PORT': '',
                    }
                }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多