Django忽略了我的DATABASE_ENGINE设置 - 有时候

时间:2009-10-28 19:12:37

标签: python django configuration

我有几个网站,每个网站都有一个不同的设置文件 - 并且名称不同。所有变体设置都有花卉主题。我们必须将网站分开。

C:\Proj-Carnation> echo %DJANGO_SETTINGS_MODULE%
path.to.settings_carnation_win32

我们有许多不使用内置django-admin.py test命令的测试程序,因为它们是由Django前端启动的大型批处理作业,并使用Django ORM。我们需要使用django.db.connection.creation.create_test_db()方法来创建一个新的测试数据库。

我们一直在使用这个测试程序。目前,它已停止工作。我们已经进行了大量的代码结构更改,升级到Django 1.1.1和Python 2.6。所有都是罪魁祸首。

当我运行Python时,我看到了这一点。

C:\Proj-Carnation> python
Python 2.6.2 (r262:71605, Apr 14 2009, 22:40:02) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from django.conf import settings
>>> settings.DATABASE_ENGINE
INSDIE django.db.__init__, settings.DATABASE_ENGINE=''
'sqlite3'
>>> import django.db
>>> django.db.connection
<django.db.backends.dummy.base.DatabaseWrapper object at 0x00EE88B0>

在导入django.db期间,某些设置显然未设置。我在django.db中添加了一个打印声明(拼写错误的“INSIDE”)。设置未设置。

最终,settings.DATABASE_ENGINE变为'sqlite3'。在某种程度上,这种“最终”行为是预期的:settings模块使用延迟加载器技术。

问题是:连接 - 根据不完整的设置构建 - 是dummy数据库后端。然而,最终设置显示引擎为'sqlite3'

在另一个项目(“Root”项目)中,没有问题。事情很完美。数据库设置创建正确的sqlite3后端实例。

那么,有什么不同?我很难过。这是环境设置或物理目录树是最重要的潜在问题。

在不起作用的C:\Proj-Carnation中,PYTHONPATHC:\Proj-Carnation;C:\Proj-Root;C:\This;C:\That

在工作根项目C:\Proj-Carnation中,PYTHONPATHC:\Proj-Root;C:\This;C:\That

我是否在“Carnation”项目中寻找隐藏了根项目内容的内容?遗憾的是,Carnation项目只有一些文件,它们位于一个包(local)中,以确保它们的名称与根项目不同。

1.1.1版中是否有一些Django初始化不同?例如,django.conf中是否存在与Python 2.6和Django 1.1.1不相符的内容?

是否存在一些我忽略的相对进口问题?

1 个答案:

答案 0 :(得分:9)

找到它。

当您的设置模块位于包内时,该包的顶级__init__.py成员无法导入任何类型的任何Django材料。

如果包含您的设置的顶级__init__.py具有Django导入,则Django导入将(可能)在创建设置之前使用默认设置。

由于Django中的某些东西(如数据库连接)是单例,因此在读取设置时创建的东西是唯一可以存在的东西。

请勿在包含设置模块的包中的__init__.py中放置任何内容。