要检查是否需要合并迁移,我可以运行 manage.py makemigrations --check
或 manage.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 中检查这个,他们不想处理容器化。
有没有人找到一种无需启动数据库即可检查迁移合并冲突的简单方法?
最佳答案
由于目标是在没有 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': '',
}
}
关于python - 检查是否需要合并迁移,没有数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46162071/