【问题标题】:Why does django complain that I have not set my ENGINE yet?为什么 django 抱怨我还没有设置我的 ENGINE?
【发布时间】:2010-07-14 18:16:44
【问题描述】:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'djangobb',                      # Or path to database file if using sqlite3.
        'USER': 'root',                      # Not used with sqlite3.
        'PASSWORD': 'root',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}

有什么想法吗?我无法使用 manage.py 运行 syncdb 命令:

    Environment:

Request Method: GET
Request URL: http://localhost:8000/admin/
Django Version: 1.2.1
Python Version: 2.5.4
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.sitemaps',
 'django.contrib.admin',
 'django.contrib.admindocs',
 'registration',
 'django_authopenid',
 'djangobb_forum',
 'djapian',
 'messages']
Installed Middleware:
('django.middleware.cache.UpdateCacheMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.locale.LocaleMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.csrf.middleware.CsrfMiddleware',
 'django_authopenid.middleware.OpenIDMiddleware',
 'django.middleware.cache.FetchFromCacheMiddleware',
 'django.middleware.transaction.TransactionMiddleware',
 'djangobb_forum.middleware.LastLoginMiddleware',
 'djangobb_forum.middleware.UsersOnline')


Traceback:
File "C:\Python25\Lib\site-packages\django\core\handlers\base.py" in get_response
  80.                     response = middleware_method(request)
File "C:\Python25\Lib\site-packages\django\middleware\locale.py" in process_request
  16.         language = translation.get_language_from_request(request)
File "C:\Python25\Lib\site-packages\django\utils\translation\__init__.py" in get_language_from_request
  90.     return real_get_language_from_request(request)
File "C:\PYTHON25\lib\site-packages\django\utils\functional.py" in _curried
  55.         return _curried_func(*(args+moreargs), **dict(kwargs, **morekwargs))
File "C:\Python25\Lib\site-packages\django\utils\translation\__init__.py" in delayed_loader
  36.     return getattr(trans, real_name)(*args, **kwargs)
File "C:\Python25\Lib\site-packages\django\utils\translation\trans_real.py" in get_language_from_request
  339.         lang_code = request.session.get('django_language', None)
File "C:\Python25\Lib\site-packages\django\contrib\sessions\backends\base.py" in get
  63.         return self._session.get(key, default)
File "C:\Python25\Lib\site-packages\django\contrib\sessions\backends\base.py" in _get_session
  172.                 self._session_cache = self.load()
File "C:\Python25\Lib\site-packages\django\contrib\sessions\backends\db.py" in load
  20.                 expire_date__gt=datetime.datetime.now()
File "C:\Python25\lib\site-packages\django\db\models\manager.py" in get
  132.         return self.get_query_set().get(*args, **kwargs)
File "C:\Python25\Lib\site-packages\django\db\models\query.py" in get
  336.         num = len(clone)
File "C:\Python25\Lib\site-packages\django\db\models\query.py" in __len__
  81.                 self._result_cache = list(self.iterator())
File "C:\Python25\Lib\site-packages\django\db\models\query.py" in iterator
  269.         for row in compiler.results_iter():
File "C:\Python25\Lib\site-packages\django\db\models\sql\compiler.py" in results_iter
  672.         for rows in self.execute_sql(MULTI):
File "C:\Python25\Lib\site-packages\django\db\models\sql\compiler.py" in execute_sql
  717.             sql, params = self.as_sql()
File "C:\Python25\Lib\site-packages\django\db\models\sql\compiler.py" in as_sql
  56.         out_cols = self.get_columns(with_col_aliases)
File "C:\Python25\Lib\site-packages\django\db\models\sql\compiler.py" in get_columns
  185.                     col_aliases)
File "C:\Python25\Lib\site-packages\django\db\models\sql\compiler.py" in get_default_columns
  273.                 r = '%s.%s' % (qn(alias), qn2(field.column))
File "C:\Python25\Lib\site-packages\django\db\models\sql\compiler.py" in quote_name_unless_alias
  43.         r = self.connection.ops.quote_name(name)
File "C:\Python25\lib\site-packages\django\db\backends\dummy\base.py" in complain
  15.     raise ImproperlyConfigured("You haven't set the database ENGINE setting yet.")

Exception Type: ImproperlyConfigured at /admin/
Exception Value: You haven't set the database ENGINE setting yet.

【问题讨论】:

  • 你确定你正在运行带有新数据库配置风格的 django 1.2?
  • 在数据库配置方面,1.1和1.2有很大区别吗? Djangobb 说它需要 Django 1.1,但我之前安装了 Django 1.2。可能就在那里。
  • 是的,您使用的配置是在 1.2 添加 MultiDB 支持时引入的。

标签: python django


【解决方案1】:

我设置了我的旧方式和新方式,所以它不是 django-version-specific:

DATABASE_ENGINE   = 'django.db.backends.sqlite3'
DATABASE_NAME     = '/path/to/db/foo.sqlite3'
DATABASE_USER     = ''
DATABASE_PASSWORD = ''
DATABASE_HOST     = ''
DATABASE_PORT     = ''

DATABASES = {
  'default': {
    'ENGINE':   DATABASE_ENGINE,
    'NAME':     DATABASE_NAME,
    'USER':     DATABASE_USER,
    'PASSWORD': DATABASE_PASSWORD,
    'HOST':     DATABASE_HOST,
    'PORT':     DATABASE_PORT,
  }
}

但是,是的,我会仔细检查您的安装是否是您认为的版本。

更新:

您可能正在尝试从管理模块的设置中导入某些内容,并在设置中导入管理模块。有时循环导入会导致上述情况。

特别是,在设置中使用 reverse("url-name") 可能会导致这种情况,因为它最终会迫使它在某个深层次上查看“站点”表...

更新2:

对不起,解释一下:

  • 循环导入是指模块 A 从模块 B 导入,在某种程度上,模块 B 也需要来自模块 A 的东西。在第二级深度的某个时刻,它通常会以某种难以理解的方式失败。李>
  • Reverse() 是将 url 的名称(urls.py 中的 name="foo")转换回 url 本身的函数。这使得在设置或管理模块中并不总是可以调用。

更新3:

查看您指向的票证 djangobb.org/ticket/81,为了分解一些条款,csrf 令牌是用于添加跨站点请求伪造保护的模板标签:

http://docs.djangoproject.com/en/dev/ref/contrib/csrf/

通常看起来像这样,从我的项目中 grep:

# grep -ri csrf .
  ./registration/login.html:  <form method="post" action="{% url django.contrib.auth.views.login %}">{% csrf_token %}

关于 djapian 的主干的一点,虽然我自己不知道 djapian 是什么,但通常意味着直接安装(通常是 svn)主干——或者“最新的,签入版本,这是较新的比任何发布的,并且可能经过测试的官方版本都多”。通常,这涉及执行类似svn checkout http://wherever.com/someproject/trunk/ ./someproject 之类的操作,然后转到该目录进行安装。

【讨论】:

  • +1:我们整个上午都在互相关注 :)。这是一个很好的建议,我需要返回并更新我们使用 1.2 创建的一些应用程序,但也可以使用 w/1.1。
  • :-) 谢谢。是的,当我从 1.1 迁移到 1.2 时,这个杀了我一段时间。从 python 2.6 到 2.4 的反向移植也让我很困惑,因为一些库依赖于“foo if bar else baz”语法。我最终不得不在虚拟主机上从头开始安装 python 以获得 2.6。 :-P
  • 我已经尝试了这两种配置方法——djangobb 最初确实在 settings.py 中使用了前一种样式(我假设这是以前的 1.1 数据库配置方法),但它再次失败了。
  • 已更新。可能是循环导入或在设置或管理模块中使用 reverse()。
  • 抱歉,但我对 Web 开发和 django 还是很陌生...这是什么意思 :P
猜你喜欢
  • 2010-12-26
  • 2013-10-11
  • 1970-01-01
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
  • 2017-08-03
  • 1970-01-01
  • 2011-01-31
相关资源
最近更新 更多