首页 文章

django.db.utils.OperationalError:无法打开数据库文件

提问于
浏览
1

当我跑

python manage.py runserver

我收到这个错误

文件“/usr/local/lib/python2.7/dist-packages/Django-1.10.1-py2.7.egg/django/db/backends/sqlite3/base.py”,第209行,在get_new_connection中conn =数据库.connect(** conn_params)django.db.utils.OperationalError:无法打开数据库文件

我的settings.py:

DATABASES = {
    'default': dj_database_url.config(
        default="sqlite:///{}".format(
            os.path.join(BASE_DIR, 'db/db.sqlite3')
        )
    )
}

6 回答

  • 0

    从同一个问题中苦苦挣扎了一段时间,我相信我终于找到了解决方案!

    sudo python manage.py runserver
    

    这对我来说很有把戏 .

    我的权限告诉我一切都应该如何 . 无论如何,我仍然必须在终端的命令开头输入 sudo .

  • 0

    基本上有两个答案,即运行服务器的用户无权打开数据库文件 . 您可以尝试解决此问题:

    sudo chown $(whoami):$(whoami) /path/to/dir/db/db.sqlite3
    

    或者您没有此文件,可以通过应用migrate命令创建它:

    ./manage.py migrate
    
  • 3

    我有同样的问题,只是解决了它 . 确保www-data(或运行Web服务器的任何守护程序)都可以访问db.sqlite3文件以及它的路径 . 所以:

    sudo chown :www-data <project_folder>/
    sudo chown :www-data <project_folder>/db.sqlite3
    sudo chmod 664 <project_folder>/db.sqlite3
    
  • -1

    只需删除settings.py文件中的第一个数据库即可 .

    如果删除第一个 db ,你有 os.path.join(BASE_DIR, 'db/db.sqlite3') ,你将 os.path.join(BASE_DIR, 'db.sqlite3')

    您的数据库设置将是

    DATABASES = {
        'default': dj_database_url.config(
            default="sqlite:///{}".format(
                os.path.join(BASE_DIR, 'db.sqlite3')
            )
        )
    }
    
  • 0

    对我来说,问题是我有两个设置文件;一个用于 生产环境 ,一个用于开发 . 在我的manage.py中,我指定了部署设置文件,忘了将manage.py添加到我的.gitignore,所以当我在本地运行项目时,尝试查找 生产环境 数据库时失败了 .

  • 0

    @ whinytween96:我已经看到当 sudo 用于运行某些命令而不是其他命令时,会出现此问题 . 您需要与 sudo 的用法保持一致才能解决此问题 . 我有数据库问题,我通过使用 sudo 前缀再次运行命令来修复它 .

    • sudo python manage.py runserver

    • sudo python manage.py makemigrations

    • sudo python manage.py migrate

    为我解决了这个问题 .

相关问题