37

我使用 Postgres 进行生产和开发,但我想使用 sqlite 来运行一些测试。我没有看到一种简单的方法来配置一个引擎用于测试和另一个用于开发/生产。我错过了什么吗?

4

4 回答 4

56

在您的设置中附加以下行:

import sys
if 'test' in sys.argv or 'test_coverage' in sys.argv: #Covers regular testing and django-coverage
    DATABASES['default']['ENGINE'] = 'django.db.backends.sqlite3'

确保您的实际数据库设置出现在它们之前。

于 2011-06-15T05:47:04.970 回答
10

这不是一个直接的答案,但是是的,你错过了一个大问题——在 SQLite 上测试 Postgres 应用程序很棘手——它们是如此不同。我建议您宁愿创建一个 ram-disk(例如使用tmpfs)并在那里创建您的 Postgres 测试数据库。它不会像 SQLite 那样快,但可能比存储在 HDD 上的常规 Postgres 数据库快一个数量级。

于 2011-06-15T08:24:21.270 回答
4

您可以尝试类似于 Zachary Voase 建议的设置:http: //blog.zacharyvoase.com/2010/02/03/django-project-conventions/

(整篇文章很有用,但请向下滚动到“设置”部分,了解此处最相关的部分。)

Zach 的策略是创建一个设置文件夹,并使用文件将其标记为 python 包__init__.py。然后,您可以为每种部署类型设置一个单独的子模块,其结构如下:

settings/
|-- __init__.py     # Empty; makes this a Python package
|-- common.py       # All the common settings are defined here
|-- development.py  # Settings for development
|-- production.py   # Settings for production
|-- staging.py      # Settings for staging

按照这个概念,您可以为 postgres 设置一个部署,为 sqlite 设置一个单独的部署,并根据需要将每个配置分开。

于 2011-06-20T22:13:03.730 回答
0

我最终在我的 settings.py 中添加了以下内容。--keepdb 将在 RAM 中设置 Sqlite DB。

if 'test' in sys.argv:
    for db_test in ['default']: # Add other DBs if needed
        DATABASES[db_test]['ENGINE'] = 'django.db.backends.sqlite3'
        if '--keepdb' in sys.argv:
            DATABASES[db_test]['TEST']['NAME'] = '/dev/shm/' + db_test + '.test.db.sqlite3'
于 2021-12-31T08:16:02.990 回答