为什么;没有这样的表格:django_session“;当尝试使用管理员时?

为什么;没有这样的表格:django_session“;当尝试使用管理员时?,django,Django,我非常确定数据库已经创建,并且我已经正确执行了python manage.py syncdb,但在尝试访问时仍然会遇到此错误。这里有一些细节 Request Method: GET Request URL: http://127.0.0.1:8000/admin/ Django Version: 1.3.1 Python Version: 2.7.1 Installed Applications: ['django.contrib.auth', 'django.contrib.content

我非常确定数据库已经创建,并且我已经正确执行了
python manage.py syncdb
,但在尝试访问时仍然会遇到此错误。这里有一些细节

Request Method: GET
Request URL: http://127.0.0.1:8000/admin/

Django Version: 1.3.1
Python Version: 2.7.1
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'blog',
 'django.contrib.admin']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')

Exception Type: DatabaseError at /admin/
Exception Value: no such table: django_session

到sqlite的路径通常是问题所在

'NAME': 'c:/path/to/sqlite.db'
试试这个

from os.path import dirname, abspath
ROOT = dirname(abspath(__file__)).replace('\\', '/') + '/'

print "self.__name__: " + __name__
print "self.__file__: " + __file__
print "ROOT: " + ROOT

import django
print "django.__path__: " 
print (django.__path__)

# Contact for error messages etc. - dont forget the ',' after the first entry

ADMINS = (('dev', 'dev@example.com'),)
MANAGERS = ADMINS

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.sqlite3',        
'NAME': ROOT + 'project.db',                      
    'USER': '',    'PASSWORD': '',
    'HOST': '',    'PORT': '',                      
}
}

并检查操作系统的数据库名称前是否需要+'/'+。

按以下顺序执行即可:

首先

然后


因为我们正在运行服务器之前应用所有迁移

进行迁移将解决此问题

'NAME': 'c:/path/to/sqlite.db'
运行以下命令:

python ./manage.py migrate

python ./manage.py makemigrations

SESSION\u引擎
默认情况下使用的是
django.contrib.sessions.backends.db
,这使您需要:

  • django.contrib.sessions
    放入
    INSTALLED\u APPS
    列表变量
    settings.py
  • 您必须迁移数据库
  • 如果不想这样做,只需将
    SESSION\u引擎
    放到
    django.contrib.sessions.backends.cache
    中的
    settings.py

    因此,在您的
    settings.py
    中,如下所示:

    ...
    SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
    ...
    
    顺便说一下,正如文件中所说:

    “…简单缓存速度更快,因为它忽略了持久性。”


    如果您在任何models.py文件中添加/更新了表,则可能需要在运行服务器之前迁移数据库

    在运行“python manage.py runserver”之前运行以下命令:

    python manage.py migrate
    python manage.py makemigrations 
    

    如果运行服务器时未创建数据库或其中的会话表(如果您最近将
    admin
    应用添加到
    已安装的应用中),则会发生这种情况。要创建数据库或表,请运行此命令

    python manage.py migrate
    
    在django的旧版本中,此命令

    python manage.py syncdb
    

    它会提示您进入该错误页面,因为您的数据库甚至没有创建,这导致缺少访问管理页面的必需表

    运行以下两个命令:

    python3 manage.py migrate
    
    python3 manage.py makemigrations
    
    运行第一个命令实际上会创建数据库,其中包含必要的起始表。我也有同样的问题,这对我来说解决了100%


    解决方案来源:@satya的答案

    你能看到数据库中的表格吗?你用的是什么引擎?我敢打赌你还没有运行
    syncdb
    -运行它能解决问题吗?啊。。我常犯的错误。即使在WINDOWS上,我也跳过了在path中使用前斜杠的部分。peters的方法对我很有效,尽管使用linux并使我的db与
    manage.py
    位于同一目录中,我将第二行更改为
    ROOT=dirname(abspath(u文件_u+'/..)+'/'
    我认为在
    migrate
    命令之后生成迁移将使您再次运行
    migrate
    python3 manage.py migrate
    
    python3 manage.py makemigrations