为什么Django说我还没有设置DATABASE_ENGINE?
我有一个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\site-packages\django\db\backends\dummy\base.py", 第15行,在complain raise ImproperlyConfigured, "你还没有设置DATABASE_ENGINE 设置。" ImproperlyConfigured: 你还没有设置DATABASE_ENGINE 设置。
有没有人遇到过类似的问题?如果有,能给点建议从哪里开始吗?谢谢!
3 个回答
你可以设置一个环境变量,叫做 DJANGO_SETTINGS_MODULE,并把它的值设为 myapp.settings,这样在独立的脚本中就能正常工作了。
在 Linux 或者 bash 里,你可以这样做:export DJANGO_SETTINGS_MODULE=myapp.settings
在你导入模型之前,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)
这可能是因为你直接运行测试,比如说用 python testfile.py
这样的方式。这样做的话,你就绕过了Django的所有机制,直接使用了模型类。这样做的缺点是,数据库连接没有被自动设置好(Django会加载 settings.py
并连接到合适的数据库),所以你才会遇到错误。
其实,你应该通过Django的测试框架来运行测试(可以看看文档)。这样可以确保数据库连接设置正确等等。而且还有一些很酷的功能,比如测试数据的准备。