在执行TestCase的过程中,django.db.connection.cursor()SQL查询从主数据库而不是从测试数据库返回数据

时间:2019-10-03 15:37:57

标签: python django pytest

我正面临一个问题,我再也没有解决方法的想法。

我需要测试由数据库直接查询返回的数据。 在执行TestCase期间,django.db.connection.cursor()从主数据库而不是从测试数据库返回数据,其中包含为此测试准备的夹具。

我尝试同时使用 TestCase TransactionalTestCase 。 我尝试调试,检查变量值,发现连接确实指向测试数据库。

您知道为什么它要从主数据库返回数据吗? Django是否有将主​​数据库中的数据复制到为测试目的而创建的数据库的情况?

我正在使用:Python 3.6.5Django 2.1pytest 4.6.3pytest-django 3.5

预先感谢您的支持。


跟进

亲爱的

仅当尝试在测试用例中使用perform custom raw SQL Query directly时才会出现该问题。 Retrieving objects通过标准Django QuerySets可以正常工作。

您是否知道为什么在测试执行期间这种从db检索数据的特定方法不起作用?

1 个答案:

答案 0 :(得分:0)

我在Django文档中发现了an answer

  

如果您的代码在编译模块时尝试访问数据库,则这将在建立测试数据库之前发生,可能会导致意外结果。

还是-如果您知道在执行原始sql查询时有什么方法可以避免影响生产数据的测试,我很想知道如何做。