Django - 将模型代码与数据库进行比较

Jim*_*Gaw 8 database django django-models

我维护一个带有数据库的Django项目,该数据库有几个与实际数据库不同步的模型约束.因此,例如,某些模型字段具有null = False set,但数据库允许相应数据库列的NULL.

我很好奇是否有一个实用工具,无论是在Django还是第三方Python脚本中,它将比较每个表的SHOW CREATE TABLE输出(在本例中,使用MySQL语法)并将其与python manage.py进行比较sql输出,突出显示差异.

当然,在一个理想的情况下,数据库首先不会与Django模型代码失去同步,但是因为那就是我所在的地方,我很好奇是否在我自己编写之前找到了这个问题的解决方案.手动进行比较.

Lak*_*sad 5

./manage.py inspectdb生成与数据库中存在的模型相对应的模型文件。

您可以使用标准 unix diff 或任何其他花哨的diff 工具将其与当前模型文件进行比较,以找到差异并规划您的迁移策略。

虽然前者看起来更简单更好,但你也可以看到 sql 级别的差异。./manage.py sqlall生成当前数据库模式的sql,并相应地show create table table-name显示创建表的sql。

您可能需要参考http://code.google.com/p/django-evolution/,它曾经将数据库的状态自动迁移到当前模型中的状态。- 但请注意,该项目很旧并且似乎已被废弃。