【发布时间】:2011-10-08 09:56:39
【问题描述】:
在我的 django 项目中,我使用 mysql db 进行生产,使用 sqlite 进行测试。
问题是,我的一些代码依赖于模型完整性检查。它与mysql配合良好,但在测试中执行相同代码时不会抛出完整性错误。
我知道必须在 sqlite 中激活外键检查:
PRAGMA foreign_keys = 1;
但是,我不知道执行此激活的最佳方法是在哪里 (same question here)。
此外,以下代码将不起作用:
def test_method(self):
from django.db import connection
cursor = connection.cursor()
cursor.execute('PRAGMA foreign_keys = ON')
c = cursor.execute('PRAGMA foreign_keys')
print c.fetchone()
>>> (0,)
有什么想法吗?
【问题讨论】:
-
为什么不使用生产中使用的测试数据库?测试环境的目的不是重现生产环境吗?*
-
使用
time python manage.py test products测试单个应用程序。 mysql:0m58.232s。 Sqlite : 0m5.153s. -
这里没有一个解决方案的开始,但看起来很多讨论(和补丁)正在这张票上讨论你在这里提出的问题code.djangoproject.com/ticket/11665
-
@Thibault J:我知道这就是原因,但是在测试中,测试适合实际情况不是更重要吗?我目前处于同样的情况,测试和产品之间的 DBMS 不同,而且我有一些严重的 WTF,即使我使用的是 ORM。
-
@Clement 这确实非常重要。但是我正在使用 TDD,我不能等待 60 秒才能对每一行代码运行一次测试。在我的持续集成平台上,测试在 mysql 下运行。
标签: django sqlite pragma integrity