我使用Postgres进行生产和开发,但我想使用sqlite来运行一些测试。我没有看到一种简单的方法来配置一个引擎用于测试,另一个用于开发/生产。我错过了什么吗?
答案 0 :(得分:41)
在您的设置中添加以下行:
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'
确保您的实际数据库设置在他们之前。
答案 1 :(得分:6)
这不是一个直接的答案,但是,是的,你错过了一个大问题 - 在SQLite上测试Postgres应用程序很棘手 - 它们如此不同。我建议你创建一个ram-disk(例如使用tmpfs)并在那里创建你的Postgres测试数据库。它不会像SQLite一样快,但可能比存储在HDD上的常规Postgres数据库快一个数量级。
答案 2 :(得分:3)
您可以尝试类似于Zachary Voase建议的设置: http://blog.zacharyvoase.com/2010/02/03/django-project-conventions/
(整个帖子很有用,但请向下滚动到“设置”部分,了解与此处最相关的部分。)
Zach的策略是创建一个设置文件夹,并使用__init__.py
文件将其标记为python包。然后,您可以为每种部署类型提供单独的子模块,结构如下:
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设置单独部署,并根据需要分别为每个部署配置。
答案 3 :(得分:0)
我建议您在运行-k
时使用--keepdb
或manage.py test
-Flag并执行以下设置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'DBNAME',
'USER': 'DBNAME',
'PASSWORD': 'DBNAME',
'HOST': 'localhost',
'PORT': '',
'TEST': {
'NAME': 'DBNAME_test',
}
},
}
在我使用Django == 1.11的设置中,它就像一个魅力。祝你好运!