django 测试期间数据库创建失败

Posted

技术标签:

【中文标题】django 测试期间数据库创建失败【英文标题】:Database creation failing during django testing 【发布时间】:2020-07-14 11:50:02 【问题描述】:

我有一个带有功能数据库的功能 Django 项目。当我尝试在这个项目上运行测试时,我在数据库创建过程中收到了这个错误:

django.db.utils.InternalError: (1553, "Cannot drop index 'One response per question per level': needed in a foreign key constraint")

我在后来删除的其中一个表中有一个 unique_together 约束。

这一行

'One response per question per level'

与该 unique_together 约束相关,并存在于两个迁移文件中 - 第一次是在创建表期间,第二次是在删除期间。

当我运行测试时,它会抛出这个错误并且数据库没有被创建。我该如何解决这个问题?

【问题讨论】:

第二次迁移是否真的适用于您的本地或开发和/或生产环境? @Mehran 我不记得了。那是至少 6 个月前的事了。是否可以从迁移文件中删除此代码并在数据库中进行一些相应的更改以反映这些更改? 我认为这不是一个好主意,django 迁移非常挑剔,如果事情搞砸了,可能需要重新启动完整的数据库。但是,您可以检查是否从数据库中的 django_migrations 表中应用了相关迁移(您需要使用 db 客户端)。检查有问题的迁移是否在该表内。 @Mehran 感谢您的提示。是的,迁移已应用。 很抱歉,这似乎是 Django 问题code.djangoproject.com/ticket/24757 【参考方案1】:

这似乎是 mysql code.djangoproject.com/ticket/24757 中的一个已知问题

我现在正在使用这个workaround。

【讨论】:

以上是关于django 测试期间数据库创建失败的主要内容,如果未能解决你的问题,请参考以下文章

Django 2.0:sqlite IntegrityError:外键约束失败

如何在托管 = False 的 Django 测试期间创建表?

Django 在测试期间无法刷新数据库

如何在使用managed = False的Django测试期间创建表

用于创建数据库、运行测试的 Django / postgres 设置

(DatabaseError: no such table: django_session) Django 1.3 selenium 测试期间的错误