【发布时间】:2013-09-04 15:16:59
【问题描述】:
我想将 db 后端从 django_pyodbc 切换到 sqlite,以确保我的自定义用户模型在我开始弄乱我的 db 之前正常工作。所以我注释掉了 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 = {
'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__.py、base.py、dev.py 及其关联的 .pyc 文件。此外,还有一个 settings.pyc 文件没有对应的 .py 文件(我假设这是我将 settings.py 分割成单独的部分之前的残余。我尝试删除它并再次执行 syncdb 并得到了这个:
C:\...\my_project>manage.py syncdb --settings=my_project.settings.devettings=web_ems.
Traceback (most recent call last):
File "C:\...\my_project\manage.py", line 15, in <module>
if settings.DEBUG:
File "C:\Python27\lib\site-packages\django\conf\__init__.py", line 53, in __getattr__
self._setup(name)
File "C:\Python27\lib\site-packages\django\conf\__init__.py", line 48, in _setup
self._wrapped = Settings(settings_module)
File "C:\Python27\lib\site-packages\django\conf\__init__.py", line 134, in __init__
raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s"% (self.SETTINGS_MODULE, e))
ImportError: Could not import settings 'my_project.settings.settings' (Is it on sys
.path?): No module named settings
【问题讨论】:
-
向我们展示您的
settings.py。 -
DATABASES可以。 -
运行
shell时,输入from my_project import settings; settings并检查文件名。 -
my_project\my_project\settings\_init_.pyc
-
其实我是在撒谎,我是在别处重新定义设置模块!在
manage.py:os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_project.settings.settings")。我将settings.settings更改为settings.dev,一切都很好。我想踢自己!谢谢@AndreaCorbellini 让我到达那里。如果您提出答案,我会接受它
标签: django sqlite database-migration django-syncdb django-pyodbc