Django:没有这样的表:django_session

时间:2010-09-02 21:47:29

标签: 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.
    }
}

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

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

33 个答案:

答案 0 :(得分:47)

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

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

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

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

答案 1 :(得分:14)

如果它可以帮助其他人:我的问题是我的django.contrib.sessions中没有取消评论INSTALLED_APPS应用。取消注释,并重新运行syncdb就可以了。

答案 2 :(得分:12)

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

答案 3 :(得分:11)

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

manage.py makemigrations
manage.py migrate

它对我有用。

答案 4 :(得分:8)

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

答案 5 :(得分:6)

在命令shell中运行:

python manage.py migrate

这对我来说很有用。

答案 6 :(得分:5)

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

./manage.py testserver

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

答案 7 :(得分:3)

发生这种情况的原因可能是迁移失败

•执行以下命令:

python manage.py showmigrations

python manage.py migrate --fake your_app_name zero

python manage.py showmigrations

•如果您正在本地计算机上运行,​​则从应用程序的迁移文件夹中删除名为0001. init .py的文件

•执行以下命令:

python manage.py makemigrations

python manage.py migrate

•然后运行django服务器:

python manage.py runserver

答案 8 :(得分:2)

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

答案 9 :(得分:2)

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

  

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

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

python manage.py migrate

这将解决问题。

答案 10 :(得分:2)

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

答案 11 :(得分:1)

也许您有一些未迁移的文件。

Run
Python manage.py makemigration appname
python manage.py migrate appname
python manage.py runserver

但是如果错误仍然继续 运行 python manage.py migrate 运行服务器

答案 12 :(得分:1)

我发现这就是迁移的全部。

python manage.py makemigrations APPNAME

当更改为不同的虚拟主机(例如 windows 到 linux,反之亦然)时,答案会停止

答案 13 :(得分:1)

创建架构并在“数据库”中的NAME下添加其名称 运行manage.py syncdb

答案 14 :(得分:1)

我有类似的管理员管理问题。经过几次检查后,运行" python manage.py migrate"没有分配APP的名称(获取"应用所有迁移:.....),然后在网络上运行服务器。有效。我希望这会有所帮助。

答案 15 :(得分:1)

可能它没有获得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'),

答案 16 :(得分:1)

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

manage.py makemigrations

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

答案 17 :(得分:1)

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

答案 18 :(得分:0)

这对我有用。

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

使用数据库支持的会话-

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

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

答案 19 :(得分:0)

很简单,只需运行以下命令

python ./manage.py migrate
python ./manage.py makemigrations AppName

答案 20 :(得分:0)

只需运行此命令

python manage.py makemigrations
python manage.py migrate
python manage.py runserver

答案 21 :(得分:0)

在终端或cmd提示符下运行命令

python manage.py runserver

然后

python manage.py createsuperuser 

然后通过设置用户名和密码来创建超级用户,然后您将能够看到管理员登录页面。

答案 22 :(得分:0)

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

答案 23 :(得分:0)

更改代码时,请尝试以下命令

manage.py makemigrations
manage.py migrate

答案 24 :(得分:0)

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

答案 25 :(得分:0)

在某些情况下,您可能会收到此错误,因为在创建超级用户之前您忘记运行查询python manage.py migration

答案 26 :(得分:0)

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

heroku run ls

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

答案 27 :(得分:0)

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

答案 28 :(得分:0)

在我的情况下,我不得不删除'会话'在django_migrations表中输入并运行makemigrations并在之后进行迁移。这创建了django_session表。

答案 29 :(得分:0)

在INSTALLED_APPS

中添加'django.contrib.sessions',

从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)

的数据库中

答案 30 :(得分:0)

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

./manage.py showmigrations

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

./manage.py migrate

答案 31 :(得分:-1)

只需运行您的迁移:

python manage.py migrate

答案 32 :(得分:-2)

在cmd:

中运行此命令
Python ./manage.py migrate --all

应该出现在 db