won*_*ton 4 python django django-migrations
要检查是否需要合并迁移,我可以运行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 中检查这个,他们不想处理容器化。
有没有人找到一种无需数据库即可检查迁移合并冲突的简单方法?
由于目标是在makemigrations --dry没有 mysql 数据库的情况下运行,我想出的最简单的解决方法是创建一个名为的新设置文件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': '',
},
}
Run Code Online (Sandbox Code Playgroud)
然后你可以运行
python manage.py makemigrations --check --settings yourapp.makemigrations_settings
Run Code Online (Sandbox Code Playgroud)
或者,你可以不那么优雅地做类似的事情
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': '',
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
566 次 |
| 最近记录: |