Django:没有这样的表:django_session

F_C*_*F_C 42 django

我已经找到了这个标题的几个主题,但他们的解决方案都没有为我工作.我在我的服务器上运行了两个Django站点,两个都通过Apache在我的Nginx前端(用于静态文件)提供的两个端口上使用不同的虚拟主机.一个站点使用MySql并运行得很好.另一个使用Sqlite3并在标题中获取错误.

我下载了sqlite.exe的副本并查看了mysite.sqlite3(此目录中的SQLite数据库)文件,确实有一个包含有效数据的django_session表.我的system32中有sqlite.exe,Python路径中有site-packages文件夹.

这是我的settings.py文件的一部分:

MANAGERS = ADMINS

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'mysite.sqlite3',         # Or path to database file if using sqlite3.
        'USER': '',                      # Not used with sqlite3.
        'PASSWORD': '',                  # 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.
    }
}
Run Code Online (Sandbox Code Playgroud)

我确实使用了python manage.py syncdb而没有错误,只是一个"No Fixtures"评论.

有没有人有任何想法可能会在这里发生什么?我正在考虑将所有内容转移到我的旧朋友MySql并忽略Sqlite,因为它总是给我带来一些麻烦.无论如何,我只是为了了解它而使用它.我没有压倒性的理由为什么要使用它.但同样,只是为了我的启发,有谁知道这个问题是什么?我不喜欢放弃.

Ben*_*end 48

可能是服务器使用与manage.py命令不同的工作目录.由于您提供了sqlite数据库的相对路径,因此它在工作目录中创建.尝试使用绝对路径,例如:

'NAME': '/tmp/mysite.sqlite3',
Run Code Online (Sandbox Code Playgroud)

请记住,您必须./manage.py syncdb再次运行或使用现有表复制当前数据库/tmp.

如果它解决了错误消息,您可以寻找比以下更好的地方/tmp:-)

  • 我这么说是因为在我将NAME更改为确切名称之前,它没有用。但是我想强迫它创建一个新的数据库文件,即使我只是用已经拥有的文件重写了它,也会以某种方式将其唤醒。 (2认同)

小智 21

在对代码进行任何更改后,运行以下命令

manage.py makemigrations
manage.py migrate
Run Code Online (Sandbox Code Playgroud)

它对我有用.


Ger*_*ham 14

万一它可以帮助其他人:对我来说问题是我没有django.contrib.sessions在我的应用程序中取消注释INSTALLED_APPS.取消注释,并重新运行一个syncdb诀窍.


Geo*_*ous 14

在我的情况下,问题是manage.py syncdb我做了一些更改后忘记了运行.当我这样做时,问题就解决了.

  • 在django 2.0中它变成了`manage.py migrate --run-syncdb` (4认同)

Cod*_*ded 12

在命令shell中运行它:

python manage.py migrate
Run Code Online (Sandbox Code Playgroud)

这对我来说很有用.


小智 9

当我运行"manage.py runserver"时.如果我运行时我的当前路径不在项目目录中(例如python /somefolder/somefolder2/currentprj/manage.py runserver)我会遇到像你这样的问题.在运行命令之前通过cd解决项目目录.


ayc*_*dee 6

另一种可能的原因可能来自使用:

./manage.py testserver
Run Code Online (Sandbox Code Playgroud)

然后访问管理界面。这是行不通的,因为testserver在内存中创建了一个完全独立的数据库。如果要访问管理界面,则需要使用runserver。


Nim*_*hew 5

如果存在待处理的会话迁移,则可能会发生这种情况。

您有 17 项未应用的迁移。在您应用应用程序的迁移之前,您的项目可能无法正常工作:管理、身份验证、内容类型、会话。

您可以使用以下命令来运行迁移:

python manage.py migrate
Run Code Online (Sandbox Code Playgroud)

这将解决该问题。