Django:没有这样的表:django_session

Django: no such table: django_session

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
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,因为它总是给我带来一些麻烦。无论如何,我只是为了了解它而使用它。我没有压倒性的理由为什么要使用它。但同样,只是为了我的启发,有谁知道这个问题是什么?我不喜欢放弃。


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

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

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

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


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

1
2
manage.py makemigrations
manage.py migrate

它对我有用。


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


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


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


在命令shell中运行它:

1
python manage.py migrate

这对我来说很有用。


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

1
./manage.py testserver

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


有同样的问题,我的决议是简单地将'django.contrib.comments'添加到INSTALLED_APPS并再次运行./manage.py syncdb


您有未应用的迁移。在应用之前,您的应用可能无法正常运行。
运行'python manage.py migrate'来应用它们。
python manage.py migrate这个对我有用。


syncdb已过时尝试python manage.py makemigrationspython manage.py migrate解决了问题,并且忘记添加应用名称是settings.py中已安装的应用


我在Model中做了一些更改,但没有正确地迁移到db。使用命令

1
manage.py makemigrations

解决了我的问题。我希望这会对某人有所帮助。


可能它没有得到数据库的路径。只需将其添加到您的settings.py:

1
2
3
4
5
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'),


创建一个模式,并在"数据库"中的NAME下添加其名称
运行manage.py syncdb


我有类似的管理员管理问题。经过几次检查后,运行"python manage.py migrate"而不指定APP的名称(获取"应用所有迁移:....."),然后运行服务器并在网络上运行。它工作正常。我希望这可以提供帮助。


这对我有用。

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

使用数据库支持的会话 -

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

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


我在不同的场景中遇到过这个问题。我是Django的新手,并从github克隆了一个存储库来练习它。 db.sqlite3文件也被复制了。但是里面没有django_session。我什么时候做的

1
./manage.py showmigrations

..我发现有一些迁移。但是sqlite中缺少表格,因为我从未运行过迁移。我运行migrate命令时解决了我的问题。希望这能帮助像我这样的django新手。

1
./manage.py migrate

在INSTALLED_APPS中添加'django.contrib.sessions',

从django shell运行以下命令

1
2
3
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)的数据库中


也有这个问题。重新启动postgres和apache2为我做了。让我想知道是否有某种sqlite进程遗留下来,直到你摆弄文件或东西时才删除。


就我而言,我不得不删除django_migrations表中的'sessions'条目并运行makemigrations并在之后进行迁移。这创建了django_session表。


对我而言,我更新了settings.py,运行了迁移,但systemd进程仍在使用SQLite,因为我没有重新加载它。做systemctl restart service_name解决了这个问题。


我有同样的问题所以我跑了

heroku run ls

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


并且可能是您遇到此错误的情况,因为您在创建超级用户之前忘记运行查询python manage.py migrate


如果你厌倦了使用makemigrations和迁移,但错误是相同的没有这样的表django_session。然后只是看看你在某处或另一个使用会话或调用它的代码。只需注释使用会话的代码,然后分别运行命令makemigrations和migrate。它100%解决您的问题。此错误的原因是您删除了迁移文件夹和数据库文件,这是您收到此错误的原因。可以随意询问问题是否解决


在cmd中运行此命令:

1
Python ./manage.py migrate --all

它应该出现在您的数据库中