为什么Django说我还没有设置DATABASE_ENGINE?

时间:2009-12-13 08:20:55

标签: python django postgresql

我有一个Django项目,我有点像新手。我有以下PyUnit测试试图将对象保存到PostgreSQL数据库中:

import unittest

from foo.models import ObjectType

class DbTest(unittest.TestCase):
    def testDBConnection(self):
        object_type = ObjectType()

        object_type.name = 'Test Object'
        object_type.description = 'For testing purposes'

        object_type.save()

我的数据库设置如下:

DATABASE_ENGINE = 'postgresql_psycopg2'           
DATABASE_NAME = 'FOO'             
DATABASE_USER = 'username'            
DATABASE_PASSWORD = 'password'         
DATABASE_HOST = 'localhost'            
DATABASE_PORT = '5432'    

我为我的项目运行了python manage.py syncdb,它运行成功,所以我的数据库应该正确设置。但是,当我尝试运行上述单元测试时,我收到以下错误:

  

文件   “C:\ Python26 \ LIB \站点包\ Django的\ DB \后端\虚拟\ base.py”   第15行,抱怨       raise ImproperlyConfigured,“你还没有设置DATABASE_ENGINE   尚未设置。“不正确的配置:   您尚未设置DATABASE_ENGINE   尚未设定。

有没有人遇到过像这样的问题?如果是的话,任何关于从哪里开始的建议?谢谢!

3 个答案:

答案 0 :(得分:3)

这可能是因为您直接运行测试,即仅python testfile.py。这样您就可以有效地绕过所有Django机制并直接使用Model类。 缺点是,DB后端没有自动设置(由Django加载settings.py并连接到相应的DB),因此您遇到的错误。 我想有一个解决这个问题的方法,但它确实需要内部Django工作的知识。

相反,您应该通过Django的测试框架(check out the documentation)启动测试。它将负责正确设置数据库连接等。还有一些时髦的功能,如测试夹具。

答案 1 :(得分:2)

在导入模型之前,需要先加载Django设置文件。如果您不能使用Django的测试框架,那么您可以在测试中使用此代码:

from django.conf import settings
settings.configure(
        DATABASE_ENGINE='postgresql_psycopg2',
        DATABASE_NAME='FOO',
        DATABASE_USER='username',
        DATABASE_PASSWORD='password',
        DATABASE_HOST='localhost',
        DATABASE_PORT='5432',
        INSTALLED_APPS=('foo',)

或者,如果您不需要显式,那么您可以这样做:

import django.core.management
from foo import settings
django.core.management.setup_environ(settings)

答案 2 :(得分:2)

您应该能够设置环境变量DJANGO_SETTINGS_MODULE = myapp.settings并将其用于独立脚本。

在Linux / bash中你会这样做:导出DJANGO_SETTINGS_MODULE = myapp.settings