我正在处理一个项目,该项目涉及在外部数据库(通过django-pyodbc-azure的MS SQL)中加载的巨大外部数据集(~490Gb)。我已经在他们的meta中生成了标记为managed=False
的Django模型。在我的应用程序中,这工作正常,但我似乎无法弄清楚如何运行我的单元测试。我可以想到两种方法:模拟测试数据库中的数据,并为生产数据集提供单元测试(和CI)的只读访问。这两个选项都是可以接受的,但我无法弄清楚其中任何一个:
选项1:模拟数据
由于我的模型标记为managed=False
,因此没有迁移,因此测试运行器无法创建数据库。
选项2:实时数据
django-pyodbc-azure
将尝试创建一个测试数据库,该数据库失败,因为它具有只读连接。此外,我怀疑即使允许这样做,结果数据库也会缺少所需的表格。
问如何运行我的单元测试?可以安装其他软件包或重新配置数据库。我的设置使用django 1.9和postgresql作为主数据库。
答案 0 :(得分:2)
经过一天的盯着我的屏幕后,我找到了一个解决方案:
我从模型中删除了managed=True
,并生成了迁移。为了防止对生产数据库进行实际迁移,我使用了数据库路由器来阻止迁移。 (对于适当的应用和数据库,在allow_migrate
中返回False。)
在我的设置中,我检测是否正在运行单元测试,然后只是不定义数据库路由器或外部数据库。随着迁移的出现,单元测试。