Django正在用我的DATABASES设置做一些奇怪的事情

时间:2013-09-04 15:17:00

标签: django sqlite database-migration django-syncdb django-pyodbc

我想将db后端从django_pyodbc切换到sqlite,以确保我的自定义用户模型在我开始搞乱我的数据库之前工作。所以我注释掉了DATABASES设置并添加了一个使用sqlite的新设置。我之前(在这个项目上)也没有遇到任何问题,但现在我不知道发生了什么。

syncdb响应就像它正在查看已经同步的数据库,即它什么也没做。

shell中,settings.DATABASES返回原始数据库的设置(令人震惊的是,它仍然认为我使用的是几周前我为django_pyodbc切换的sqlserver_ado后端),我可以访问与我的用户模型没有任何关系的模型,但那些确实返回错误的模型(因为我更改了一些用户字段名称)。在回溯中,我看到它仍在查看MSSQL数据库。

runserver可以工作,但是当我去一个页面时,我得到一个DatabaseError - 没有这样的表:django_session。异常位置位于... \ django \ db \ backends \ sqlite3 \ ...

以下是完整的追溯:

Traceback:
File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response
  187.                 response = middleware_method(request, response)
File "C:\Python27\lib\site-packages\django\contrib\sessions\middleware.py" in process_response
  28.                 if request.session.get_expire_at_browser_close():
File "C:\Python27\lib\site-packages\django\contrib\sessions\backends\base.py" in get_expire_at_browser_close
  253.         if self.get('_session_expiry') is None:
File "C:\Python27\lib\site-packages\django\contrib\sessions\backends\base.py" in get
  57.         return self._session.get(key, default)
File "C:\Python27\lib\site-packages\django\contrib\sessions\backends\base.py" in _get_session
  168.                 self._session_cache = self.load()
File "C:\Python27\lib\site-packages\django\contrib\sessions\backends\db.py" in load
  18.                 expire_date__gt=timezone.now()
File "C:\Python27\lib\site-packages\django\db\models\manager.py" in get
  143.         return self.get_query_set().get(*args, **kwargs)
File "C:\Python27\lib\site-packages\django\db\models\query.py" in get
  398.         num = len(clone)
File "C:\Python27\lib\site-packages\django\db\models\query.py" in __len__
  106.                 self._result_cache = list(self.iterator())
File "C:\Python27\lib\site-packages\django\db\models\query.py" in iterator
  317.         for row in compiler.results_iter():
File "C:\Python27\lib\site-packages\django\db\models\sql\compiler.py" in results_iter
  775.         for rows in self.execute_sql(MULTI):
File "C:\Python27\lib\site-packages\django\db\models\sql\compiler.py" in execute_sql
  840.         cursor.execute(sql, params)
File "C:\Python27\lib\site-packages\django\db\backends\util.py" in execute
  41.             return self.cursor.execute(sql, params)
File "C:\Python27\lib\site-packages\django\db\backends\sqlite3\base.py" in execute
  366.             six.reraise(utils.DatabaseError, utils.DatabaseError(*tuple(e.args)), sys.exc_info()[2])
File "C:\Python27\lib\site-packages\django\db\backends\sqlite3\base.py" in execute
  362.             return Database.Cursor.execute(self, query, params)

是的;我已经尝试再次打开和关闭电脑。有任何想法吗?谢谢。

==编辑==

以下是我的DATABASES设置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': PROJECT_ROOT.child('temp_db').child('sqlite.db'),
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '',
    }
}

# DATABASES = {
#     'default': {
#         'ENGINE': 'django.db.backends.django_pyodbc',
#         'NAME': my_project,
#         'USER': '',
#         'PASSWORD': '',
#         'HOST': my_host,
#         'PORT': '',
#         'OPTIONS': {
#             'driver': 'SQL Server',
#             'MARS_Connection': True,
#         }
#     }
# }

== EDIT2 ==

我查看了我的设置文件夹,找到了__init__.pybase.pydev.py及其相关的.pyc文件。另外,有一个settings.pyc文件,没有相应的.py文件(我假设这是一个残余,从我将settings.py切成单独的片段之前。我尝试删除它并做{{1再次得到了这个:

syncdb

1 个答案:

答案 0 :(得分:1)

您没有使用正确的设置模块,因此您所做的更改不会产生任何影响。

可能的原因可能很多,但主要的可能性有两个:

  1. 您使用的是错误位置的模块(即您的PYTHONPATH错误);
  2. 您的DJANGO_SETTINGS_MODULE错了。
  3. 额外提示:如果您想知道您正在使用的设置模块,请打开shell并输入:

    >>> from django.conf import settings
    >>> settings.SETTINGS_MODULE
    'my_project.settings'
    

    然后,如果您想知道您是否使用了正确路径中的my_project.settings,请使用:

    >>> from my_project import settings
    >>> settings
    <module 'my_project.settings' from '...'>