检查是否需要合并迁移,没有数据库

时间:2017-09-11 18:21:17

标签: python django django-migrations

要检查是否需要合并迁移,我可以运行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中检查这个,他们不想处理集装箱化问题。

有没有人找到一种简单的方法来检查迁移合并冲突而不需要数据库?

1 个答案:

答案 0 :(得分: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': '',
                }
            }