我有一个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 尚未设定。
有没有人遇到过像这样的问题?如果是的话,任何关于从哪里开始的建议?谢谢!
答案 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