19

我有一个使用本地 PostgreSQL 服务器的 Django 项目。我正在使用调试器来调试我遇到的一些奇怪的错误。当调试器在其中一项测试中停止时,我尝试查看测试数据库。我看到了这个新数据库(test_project1),并且所有的方案都按应有的方式定义。但是所有的桌子都是空的。

我知道表格不是空的:

  • 我使用了一个夹具,一些测试已经运行并返回了数据。
  • 后测试创建了一个新用户并返回 201 状态代码。

然而,当我尝试使用pgAdmin3or访问数据库时,我看不到任何数据psql

知道这里发生了什么吗?Django 是否使用某种复杂的缓存机制?

4

2 回答 2

18

Django将每个测试TestCase包装在自己的事务中。因此,当您通过 ORM 发出请求时,您的数据库不会被使用。

于 2012-04-29T05:38:40.940 回答
2

django.test.TestCase可以通过继承 fromdjango.test.TransactionTestCase而不是来避免正在使用的数据库事务TestCase。然后数据将在数据库中可见。

您可能只想在调试时临时执行此操作,以便django.test.TestCase在其余时间获得性能优势。

Django 文档:
django.test.TransactionTestCase
django.test.TestCase

于 2020-07-02T22:45:22.030 回答