我必须在这里忽略明显的。 我正在使用django 1.5.x并正在创建基于djangos TestCase类的单元测试。 我在设置中定义了一堆数据库,因为我从很多不同的源中提取(只读)。在运行测试时,我只想创建我的默认数据库的测试版本,其余的我想要标记为只读而不是尝试重新创建为test_db_name(用户定义的赢得' t(可以' t)具有无论如何都要创建这些dbs的权限。)
当然这是可能的 - 正如我所说,我必须错过显而易见的事情?
感谢任何帮助。
马修
答案 0 :(得分:2)
不明显,不。 Sort-of documented,您可以设置在测试时使用的数据库名称:
settings.py
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.spatialite',
'NAME': 'db.sqlite3',
'TEST_NAME': '/tmp/test.sqlite3',
},
}
如果您不想构建(或重建)测试数据库,则需要将数据库名称复制到TEST_NAME 和使用新的python manage.py test
{{3命令保持数据库不变,而不是让Django尝试在运行之间删除它。截至2014年6月,您必须升级到Django的开发版才能访问它;最终这将是稳定发布。这方面的缺点是,据我所知,它适用于所有数据库,而不仅仅是您的只读数据库。
答案 1 :(得分:0)
我遇到了同样的问题并设法解决了这个问题:
settings.py
DATABASES = {
'default': {...},
'other': {...}
}
DATABASE_ROUTERS = ['routers.MyRouter']
...
TESTING = 'test' in sys.argv
if TESTING:
DATABASE_ROUTERS = []
DATABASES.pop('other')
如果您不使用硬编码数据库路由,例如使用'using' 并且只使用'DATABASE_ROUTERS',那么这个解决方案应该足够好了。
当然,如果您想要实际测试与远程数据库的连接以及存储在那里的数据,那么这就不可能了。