为啥 django test --keep-db 适用于 postgres 数据库但不适用于默认 sqlite3

Posted

技术标签:

【中文标题】为啥 django test --keep-db 适用于 postgres 数据库但不适用于默认 sqlite3【英文标题】:Why django test --keep-db works with postgres database but not with default sqlite3为什么 django test --keep-db 适用于 postgres 数据库但不适用于默认 sqlite3 【发布时间】:2018-01-27 03:20:41 【问题描述】:

我正在两种数据库设置中测试 Django (v1.11.4) 应用程序: 1) 在 docker 容器中运行的 postgres 数据库 要么 2) sqlite3 作为(默认数据库)

当使用 --keepdb 选项运行测试时,我观察到这两种设置的不同行为:对于 postgres --keepdb 按预期工作(没有数据库创建并且运行测试很快)但对于 sqlite3 数据库 --keepdb 似乎不起作用(每次运行测试都会创建数据库)。 是否可以让--keepdb 与 sqlite3 一起使用?如果是这样,知道哪些设置可能会影响上述行为吗?

【问题讨论】:

【参考方案1】:

默认情况下,Django uses an in-memory database when testing sqlite。这意味着测试数据库不是持久的。您可以通过指定测试名称在 DATABASES 设置中覆盖此行为:

DATABASES = 
    'default': 
        'ENGINE': 'django.db.backends.sqlite',
        'NAME': 'db.sqlite3',
        'TEST': 
            'NAME': 'testdb.sqlite3',
        ,
    ,

【讨论】:

以上是关于为啥 django test --keep-db 适用于 postgres 数据库但不适用于默认 sqlite3的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 django 的响应错误中没有设置 .accepted_renderer?

为啥 TinyMCE 显示 HTML 标签?

为啥 django-rest-framework 不显示 OneToOneField 数据 - django

为啥 django-south 不包含在 django.contrib 中? [复制]

为啥Django无法正常运行?

为啥我不能注销 django 用户身份验证?