You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MacOS环境下Django 1.10.6报django_session不存在错误求助

解决Django 1.10.6在MacOS中出现"relation 'django_session' does not exist"的问题

这个错误的核心原因很明确:Django的核心系统表(比如django_session)没有被创建,而这通常是因为你没有在项目根目录下正确执行migrate命令导致的。下面是一步步的解决方案:

1. 先定位到正确的工作目录

你需要切换到包含manage.py的项目根目录——这是执行Django管理命令的唯一正确位置。很多人会误在应用目录或者子目录下执行命令,这就会导致核心应用的迁移无法被处理。

打开终端,用命令切换到根目录:

cd /path/to/your-django-project

执行ls命令确认,你应该能看到manage.py文件,以及你的应用目录(比如sites)。

2. 确认核心应用已启用

打开项目根目录下的settings.py,检查INSTALLED_APPS列表,确保包含以下核心应用(默认配置里应该有,但以防被误删):

INSTALLED_APPS = [
    # 其他自定义应用...
    'django.contrib.sessions',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    # 其他系统应用...
]

django.contrib.sessions是生成django_session表的关键应用,必须存在于列表中。

3. 执行完整的迁移命令

之前你只能在单个应用下执行migrate,但这只会处理该应用的迁移,而Django自带的核心应用(比如sessions、auth)的迁移文件不在你的应用目录里,必须通过根目录的migrate命令来统一处理:

先执行(如果你的自定义应用有未生成的迁移文件):

python manage.py makemigrations

然后执行完整的迁移,这会创建所有核心表和你自己应用的表:

python manage.py migrate

注意:不要在命令后面加应用名(比如python manage.py migrate sites),那样只会处理sites应用的迁移,跳过了核心系统的表创建。

4. 检查数据库文件权限(针对SQLite)

如果以上步骤执行失败,可能是MacOS下SQLite数据库文件(默认是db.sqlite3)的权限问题。Django需要读写这个文件的权限:

用命令查看权限:

ls -l db.sqlite3

如果当前用户没有读写权限,执行以下命令修改:

chmod 644 db.sqlite3

然后重新执行migrate命令。

5. 极端情况:重置数据库(备份后操作)

如果之前的数据库已经损坏,你可以备份好数据后重置:

  1. 删除项目根目录下的db.sqlite3文件
  2. 重新执行python manage.py migrate,这会重新创建一个全新的数据库,包含所有核心表和应用表。

为什么Linux下正常?因为你在Linux环境下正确地在项目根目录执行了migrate,所有核心表都被创建了;而MacOS下你只在单个应用下执行迁移,漏掉了Django自带系统的表,所以访问时会找不到django_session表。

内容的提问来源于stack exchange,提问作者Fábio Marques

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:33:13