python - 在 TestCase 执行期间 django.db.connection.cursor() SQL 查询从主数据库返回数据,而不是从测试数据库返回数据

标签 python django pytest

我遇到了一个问题,但我不知道如何解决。

我需要测试从数据库直接查询返回的数据。 在测试用例执行期间,django.db.connection.cursor() 从主数据库返回数据,而不是从测试一返回数据,其中包含为此测试目的准备的固定装置。

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

你知道为什么它从主数据库返回数据吗?是否存在 Django 将数据从主数据库复制到为测试目的而创建的数据库的情况?

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

预先感谢您的支持。

<小时/>

后续

亲爱的,

只有在尝试 perform custom raw SQL Query directly 时才会出现该问题在测试用例内。 Retrieving objects按照标准 Django QuerySets 工作得很好。

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

最佳答案

我找到了an answer在 Django 文档中:

If your code attempts to access the database when its modules are compiled, this will occur before the test database is set up, with potentially unexpected results.

仍然 - 如果您知道在执行原始 SQL 查询时避免生产数据影响测试的任何方法,我很想知道如何做到这一点。

关于python - 在 TestCase 执行期间 django.db.connection.cursor() SQL 查询从主数据库返回数据,而不是从测试数据库返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58222564/

相关文章:

python - 更新单个 Django 模型字段

ajax - Django:通过 Ajax 设置 session

pytest - 在 py.test 中,如何缩小 xfail 标记的范围?

Python:如何从字节中提取特定位?

python - 在django框架中将数据从python传递到html View

Python API 连接问题/不确定他们在问什么

python - 如何断言列表中确实包含预期的元素?

django - 如何使用 Pytest 在 Django 中测试缓存存储(Redis)?

Python ASCII 到 Unicode

Python 列表比较和合并