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

标签 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 中检查这个,他们不想处理容器化。

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

最佳答案

由于目标是在没有 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/

相关文章:

python - 如何通过套接字检索 python.logging 日志记录

python - 使用python以循环方式裁剪图像

python - 出于测试目的对整个 Django 站点进行密码保护的最明智方法是什么

python - Heroku 上的 Django 和 Postgresql - 无法将主机名 "db"转换为地址 : Name or service not known

python - 是否可以在 Django 项目之外更改 'migrations' 文件夹的位置?

django - 如何判断迁移是否可逆?

python - 如何在tensorflow.js上加载/重新训练/保存ssd_inception_v2_coco?

python - 使用外部IP地址连接到服务器时出现Curl "Connection Refused"

python - Django 代码仅在调试时有效

python - 带有 docker 的 Django 不运行自定义应用程序的迁移