Django:没有这样的表:django_session

我已经找到了多个与此标题相关的主题,但是它们的解决方案都不适用于我。 我的服务器上有两个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.
    }
}

我确实使用了python manage.py syncdb,没有错误,只是一个“ No Fixtures”注释。

有谁知道这里可能还会发生什么? 我正在考虑仅将所有内容转移到我的老朋友MySql上,而忽略Sqlite,因为实际上它总是给我带来一些麻烦。 我只是为了知道它而使用它。 我没有绝对的理由要使用它。 但是,再次出于我的兴趣,有人知道这个问题是什么吗? 我不喜欢放弃

F_C asked 2020-08-09T02:40:53Z
25个解决方案
48 votes

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

'NAME': '/tmp/mysite.sqlite3',

请记住,您必须再次运行/tmp或将具有现有表的当前数据库复制到/tmp

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

Benjamin Wohlwend answered 2020-08-09T02:41:09Z
21 votes

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

manage.py makemigrations
manage.py migrate

它为我工作。

CMY answered 2020-08-09T02:41:34Z
14 votes

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

Gervase Markham answered 2020-08-09T02:41:56Z
13 votes

就我而言,问题是我做了一些更改后忘记运行manage.py syncdb。 当我这样做时,问题就解决了。

George Eracleous answered 2020-08-09T02:42:16Z
11 votes

在命令外壳中运行此命令:

python manage.py migrate

这对我来说是固定的。

CodeBlooded answered 2020-08-09T02:42:40Z
9 votes

当我运行“ manage.py runserver”时。 如果我在当前路径不在项目目录中时运行(例如python /somefolder/somefolder2/currentprj/manage.py runserver),则会遇到类似您的问题。 在运行命令之前通过cd解决到项目目录。

Chaiwit Jarunyakorn answered 2020-08-09T02:43:00Z
6 votes

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

./manage.py testserver

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

aychedee answered 2020-08-09T02:43:25Z
3 votes

遇到同样的问题,我的解决方法是将django.contrib.comments添加到INSTALLED_APPS并再次运行./manage.py syncdb

Midge answered 2020-08-09T02:43:46Z
3 votes

您有未应用的迁移。 在应用之前,您的应用可能无法正常运行。运行“ python manage.py migration”以应用它们。python manage.py migration这对我有用。

Sanjay answered 2020-08-09T02:44:06Z
2 votes

创建模式,并将其名称添加到“数据库”中的“名称”下运行manage.py syncdb

devesh answered 2020-08-09T02:44:26Z
2 votes

可能它没有获取db的路径。 只需将其添加到您的settings.py:

import os
PROJECT_PATH = os.path.dirname(os.path.abspath(__file__))

#modify your db NAME as below:
'NAME': os.path.join(PROJECT_PATH,'mysite.sqlite3'),
eswar answered 2020-08-09T02:44:46Z
2 votes

我对Model做了一些更改,但未正确迁移到db。 使用命令

manage.py makemigrations

解决了我的问题。 希望对您有所帮助。

Raghu Venmarathoor answered 2020-08-09T02:45:10Z
2 votes

我在管理员管理中也遇到类似的问题。 经过几次检查后,在不分配APP名称的情况下运行“ python manage.py migration”(获取“ Apply all migrations:.....”),然后运行runserver并在网络上运行。

jayson888 answered 2020-08-09T02:45:30Z
2 votes

syncdb已过时,请尝试使用python manage.py makemigrationspython manage.py migrate解决此问题,并且不要忘记将应用名称添加为settings.py中已安装的应用

Pranoy Sarkar answered 2020-08-09T02:45:50Z
2 votes

如果有挂起的会话迁移,可能会发生这种情况。

您有17个未应用的迁移。 您的项目可能无法正常工作 直到您为应用应用迁移:管理员,身份验证,内容类型, 会议。

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

python manage.py migrate

这样可以解决问题。

Nimish David Mathew answered 2020-08-09T02:46:24Z
1 votes

也有这个问题。 重新启动postgres和apache2为我做到了。 让我想知道是否还有某种sqlite进程,直到您弄弄文件或其他东西后才删除。

Will S answered 2020-08-09T02:46:44Z
1 votes

我在其他情况下遇到了这个问题。 我是Django的新手,并从github克隆了一个存储库以进行实践。 文件db.sqlite3也已复制。 但是其中没有django_session。 当我做

./manage.py showmigrations

..我发现有一些迁移。 但是由于我从未进行过迁移,因此表在sqlite中丢失了。 运行迁移命令时,我的问题已解决。 希望这对像我这样的django新手有所帮助。

./manage.py migrate
Vikas answered 2020-08-09T02:47:10Z
1 votes

在INSTALLED_APPS中添加(session_key, session_data , expire_date)

从Django Shell运行以下命令

python manage.py makemigrations  #check for changes
python manage.py migrate #apply changes in DbSQLite
python manage.py syncdb #sync with database

django_session将出现在数据库中,带有(session_key, session_data , expire_date)

Roshan Bagdiya answered 2020-08-09T02:47:39Z
1 votes

就我而言,我必须擦除django_migrations表中的'sessions'条目,然后运行makemigrations并随后进行迁移。 这样就创建了django_session表。

Michelle Fernández answered 2020-08-09T02:47:59Z
1 votes

对我来说,是我更新了settings.py,运行了迁移,但是系统化进程仍在使用SQLite,因为我没有重新加载它。 执行systemctl restart service_name解决了该问题。

Pavel Vergeev answered 2020-08-09T02:48:20Z
1 votes

我遇到了同样的问题,所以我跑了

db.sqlite3

并发现服务器中缺少db.sqlite3文件。就我而言,这是因为我通过在.gitignore文件中添加它来免除它。

Steev James answered 2020-08-09T02:48:45Z
1 votes

您可能会遇到此错误,因为在创建超级用户之前您忘记运行查询python manage.py migration了

Nikhil Bhardwaj answered 2020-08-09T02:49:05Z
1 votes

如果您厌倦了使用makemigrations进行迁移,但是错误是相同的,则不使用此类表django_session。 然后看看您使用会话或调用它的某个地方或其他地方编写代码。 只需注释您正在使用会话的代码,然后分别运行命令makemigrations和migration。 它100%解决了您的问题。此错误的原因是您删除了Migrations文件夹和数据库文件,这是您收到此错误的原因。请随时询问问题是否未解决

Arun answered 2020-08-09T02:49:26Z
1 votes

这对我有用。

来自[https://docs.djangoproject.com/en/2.2/topics/http/sessions/]

使用数据库支持的会话-

如果要使用数据库支持的会话,则需要将'django.contrib.sessions'添加到INSTALLED_APPS设置中。

配置完安装后,请运行manage.py migrate以安装用于存储会话数据的单个数据库表。

Abhishek Poojary answered 2020-08-09T02:50:03Z
-1 votes

在cmd中运行以下命令:

Python ./manage.py migrate --all

它应该在您的数据库上

Omid reza answered 2020-08-09T02:50:27Z
translate from https://stackoverflow.com:/questions/3631556/django-no-such-table-django-session