【问题标题】:Why does Django say I haven't set DATABASE_ENGINE yet?为什么 Django 说我还没有设置 DATABASE_ENGINE?
【发布时间】:2010-12-26 03:19:39
【问题描述】:

我有一个 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 行,在抱怨中 raise ImproperlyConfigured,“您尚未设置 DATABASE_ENGINE 尚未设置。” 配置不当: 您尚未设置 DATABASE_ENGINE 尚未设置。

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

【问题讨论】:

  • 你是如何运行测试的 - 你在使用 Django 的测试运行器吗?

标签: python django postgresql


【解决方案1】:

这可能是因为您直接运行测试,即只是 python testfile.py。这样您就可以有效地绕过所有 Django 机制并直接使用模型类。 不利的一面是,数据库后端不是自动设置的(由 Django 自动设置,它加载 settings.py 并连接到适当的数据库),因此您遇到了错误。 我想有一个解决这个问题的方法,但它肯定需要了解内部 Django 的工作原理。

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

【讨论】:

    【解决方案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)
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-23
        • 2011-02-14
        • 2011-10-21
        相关资源
        最近更新 更多