【问题标题】:Django: no such table: django_sessionDjango:没有这样的表:django_session
【发布时间】:2011-04-07 14:09:03
【问题描述】:

我找到了几个具有此标题的主题,但没有一个对我有用。我的服务器上运行了两个 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,因为它确实总是给我带来一些麻烦。无论如何,我只是为了了解它而使用它。我没有压倒性的理由为什么要使用它。但是再一次,只是为了我的启迪,有人知道这个问题是什么吗?我不想放弃。

【问题讨论】:

    标签: django


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 实际上,我在 Windows XP x64 上运行 ;) 我的家用计算机是开发服务器。奇怪的是,当它以前不起作用时,它起作用了。我更改了 Python 站点包的路径,它创建了一个新的数据库文件,我用已有的文件覆盖了该文件,然后将其传输回 mysite 文件夹并将 settings.py 更改为:'I:/ xampp/htdocs/mysite/mysite.sqlite3' 在 NAME 插槽中。它出于某种奇怪的原因而起作用
    • 我这么说是因为在我刚刚将 NAME 更改为那个确切的东西之前它没有用。但我猜想强迫它创建一个新的数据库文件,即使我只是用我已经拥有的东西覆盖它,以某种方式唤醒它。
    • 我使用 Benjamin 解决方案并且它可以工作,但不知何故我无法对我的管理员做任何事情,因为我的 customusermodel 表没有找到。所以,我尝试使用 F_C 解决方案,它确实有效。
    【解决方案2】:

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

    manage.py makemigrations
    manage.py migrate
    

    它对我有用。

    【讨论】:

    • 这对我也有用...虽然我的应用程序中没有任何模型,但我想我们仍然应该运行这些命令。
    【解决方案3】:

    在命令行中运行:

    python manage.py migrate
    

    这对我来说是固定的。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 我的也是。此错误可能与使用 sqlite 作为数据库驱动程序无关。
      【解决方案5】:

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

      【讨论】:

      • 对于谁需要它 anno 2020,从 Django 1.19+ 开始,syncdb 命令现在已替换为 migrate。 “python manage.py 迁移”
      【解决方案6】:

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

      【讨论】:

      • 谢谢。我在#pythonanywhere 和服务器 wsgi 上运行 djangocms,我添加了import os import sys path = '/home/user/project' if path not in sys.path: sys.path.append(path) os.chdir(path) from project.wsgi import application 希望它可以帮助其他人。1
      • 如果您在远程服务器上运行它,请确保您应用迁移一次并在 pythonanywhere 中重新加载网络事物
      【解决方案7】:

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

      ./manage.py testserver
      

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

      【讨论】:

      • 这解决了我的错误。我的models.py 中有错误。运行 testserver 后检测到。
      【解决方案8】:

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

      您有 17 个未应用的迁移。您的项目可能无法正常工作 直到您为应用程序应用迁移:admin、auth、contenttypes、 会议。

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

      python manage.py migrate
      

      这将解决问题。

      【讨论】:

        【解决方案9】:

        这可能是因为未完成的迁移

        • 执行以下命令:

        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

        【讨论】:

          【解决方案10】:

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

          【讨论】:

            【解决方案11】:

            我在管理员管理方面遇到了类似的问题。经过几次检查后,运行“python manage.py migrate”而不分配APP的名称(获取“应用所有迁移:.....),然后运行服务器并在网络上运行。它工作。我希望这会有所帮助。

            【讨论】:

              【解决方案12】:

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

              【讨论】:

              • 你救了我这么多头痛!谢谢!
              【解决方案13】:

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

              【讨论】:

                【解决方案14】:

                我对模型进行了一些更改,但未正确迁移到数据库。使用命令

                manage.py makemigrations
                

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

                【讨论】:

                  【解决方案15】:

                  syncdb 已废弃尝试python manage.py makemigrationspython manage.py migrate 解决了问题,别忘了在settings.py 中添加应用名称是已安装的应用

                  【讨论】:

                    【解决方案16】:

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

                    heroku run ls

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

                    【讨论】:

                      【解决方案17】:

                      也许它没有得到 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'),
                      

                      【讨论】:

                      • 我对它进行了一些调整以使其更易于阅读 - 您能检查并确保我没有更改任何会删除含义的内容吗?
                      【解决方案18】:

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

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

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

                      【讨论】:

                        【解决方案19】:

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

                        【讨论】:

                          【解决方案20】:

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

                          ./manage.py showmigrations
                          

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

                          ./manage.py migrate
                          

                          【讨论】:

                            【解决方案21】:

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

                            【讨论】:

                              【解决方案22】:

                              就我而言,我必须删除 django_migrations 表中的“会话”条目,然后运行 ​​makemigrations 并在之后进行迁移。这创建了 django_session 表。

                              【讨论】:

                                【解决方案23】:

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

                                【讨论】:

                                  【解决方案24】:

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

                                  【讨论】:

                                    【解决方案25】:

                                    如果你厌倦了使用 makemigrations 和 migrate 但错误是一样的 no such table django_session.然后看看你在某处的代码或你使用会话或调用它的其他代码。只需注释您正在使用会话的代码,然后分别运行命令 makemigrations 和 migrate。它 100% 解决了您的问题。此错误的原因是您删除了迁移文件夹和数据库文件,这就是您收到此错误的原因。如果问题没有解决,请随时询问

                                    【讨论】:

                                      【解决方案26】:

                                      这对我有用。

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

                                      使用数据库支持的会话 -

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

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

                                      【讨论】:

                                        【解决方案27】:

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

                                        manage.py makemigrations
                                        manage.py migrate
                                        

                                        【讨论】:

                                          【解决方案28】:

                                          只需运行此命令

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

                                          【讨论】:

                                            【解决方案29】:

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

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

                                            【讨论】:

                                              【解决方案30】:

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

                                              python manage.py makemigrations APPNAME
                                              

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

                                              【讨论】:

                                                猜你喜欢
                                                • 1970-01-01
                                                • 2020-04-07
                                                • 2021-12-29
                                                • 2021-09-02
                                                • 1970-01-01
                                                • 2012-09-28
                                                • 2021-12-10
                                                • 2021-08-18
                                                • 2019-05-07
                                                相关资源
                                                最近更新 更多