You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django测试中创建的模型实例为何未出现在真实数据库?

Django测试中setUp创建的记录不在真实数据库的原因及解释

嘿,这完全是Django测试框架的正常设计哦!你遇到的情况一点都不奇怪,我来给你捋清楚:

核心原因:临时测试数据库

Django的TestCase(也就是你用的这个测试类)会自动为每个测试运行创建一个独立的临时数据库,所有测试过程中的数据库操作(包括你在setUp()里创建的test_user)都只会在这个临时库中执行,测试结束后这个临时库会被自动销毁,所以你的真实数据库完全不会受到测试操作的影响。

这也是为什么你在测试代码里(包括断点调试时)能正常获取到这条记录——因为你当时访问的是临时测试数据库,而不是你平时开发用的真实数据库。

补充细节

  • 你用的TestCase还会自动开启数据库事务,每个测试方法执行完后都会回滚事务,进一步保证测试之间的独立性,避免测试数据互相干扰。
  • 如果你的测试确实需要操作真实数据库(非常不推荐,容易污染生产/开发数据),可以考虑使用SimpleTestCase(但它不支持数据库操作),或者手动修改测试的数据库配置,但这违背了测试隔离的原则,一般不建议这么做。

验证小技巧

你可以在测试代码里加一行打印数据库名称的代码,就能看到测试用的是临时库了:

from django.db import connection

class UserTest(TestCase):
    def setUp(self):
        test_user = User.objects.create(name='test')
        # 打印当前连接的数据库名称
        print(connection.settings_dict['NAME'])

运行测试后,你会发现打印出来的数据库名和你真实的数据库名不一样,这就是最好的证明。

内容的提问来源于stack exchange,提问作者Jayden Foo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:57:41