如何查看导致Django迁移错误的SQL查询?

时间:2018-12-13 09:17:12

标签: django postgresql django-migrations

我正在尝试进行数据迁移,以删除表中的所有行(例如MyModel)。还有另一个表指向该表(RelatedModel)。 RelatedModel中映射到MyModel的字段为on_delete=models.SET_NULL。但是,当我运行迁移时,我得到:

  File "/usr/local/lib/python2.7/site-packages/django/db/backends/base/base.py", line 211, in _commit
    return self.connection.commit()
IntegrityError: update or delete on table "MyModel" violates foreign key constraint "f2274d6f2be82bbff458f3e5487b1864" on table "RelatedModel"
DETAIL:  Key (uuid)=(ywKMUYx7G2RoK9vqqEWZPV) is still referenced from table "RelatedModel".

我在迁移中添加了一个断点,并检查了SQL DELETE查询。我在外壳中以交互方式运行它们,并且它们在事务内部工作,但是当尝试提交时,迁移仍然中断。但是,我看不到哪个查询正是导致此错误的原因,所以我不知道如何调试此错误。有什么建议么?谢谢。

PS:我正在使用Django 1.9.13,Python 2.7,PostgreSQL 10.4。

2 个答案:

答案 0 :(得分:1)

您可以使用以下管理命令来打印用于特定迁移的SQL语句。

python manage.py sqlmigrate <app label> <migration_name to print sql for>

对于一个实例,如果您想检查django项目中hello应用的迁移,并假设您要打印0001_initial.py的sql语句。比您需要执行以下行。

python manage.py sqlmigrate hello 0001_initial.py

它将打印将在迁移时执行的SQL定义(语句)。

答案 1 :(得分:0)

使用django-debug-toolbar查看详细信息。 要么 尝试: 1.根据需要清除模型。 2.尝试删除除 init 文件之外的所有迁移。 3.删除db文件。 4.现在将迁移到应用程序 5.然后迁移