Django“无法打开数据库文件”

问题描述 投票:0回答:9

运行“python manage.pysyncdb”后,我收到一条错误消息“无法打开数据库文件”。

这是我的settings.py中的重要部分:

DATABASE_ENGINE = 'sqlite3'    # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
DATABASE_NAME = 'apps.db'      # Or path to database file if using sqlite3.
DATABASE_USER = ''             # Not used with sqlite3.
DATABASE_PASSWORD = ''         # Not used with sqlite3.
DATABASE_HOST = ''             # Set to empty string for localhost. Not used with sqlite3.
DATABASE_PORT = ''             # Set to empty string for default. Not used with sqlite3.

这是“apps.db”的权限:

-rw-r--r-- 1 root root 33792 19. Jul 10:51 apps.db

我的 django 服务器是从 apache 调用的...我不知道这是否与权限有关,但是将 apps.db 的所有者更改为“www-data”也不起作用

[编辑]

为了确保 www-data 可以访问所有这些,我执行了以下操作:

做了以下事情:

chown -R www-data apps
rm apps.db
su www-data
python manage.py syncdb

但还是不行:(

database django sqlite django-models django-admin
9个回答
50
投票

新手错误的解决方案

确保 Apache 也可以写入该目录的父目录 数据库。 SQLite 需要能够写入此目录。

确保数据库文件的完整路径的每个文件夹都没有开始 带数字,例如/www/4myweb/db(在 Windows 2000 上观察)。

如果 DATABASE_NAME 设置为类似 '/Users/yourname/Sites/mydjangoproject/db/db',确保您已经 首先创建“db”目录。

确保您的 /tmp 目录是全局可写的(不太可能的原因,因为 您系统上的其他东西也将不起作用)。 ls /tmp -ald 应该 产生 drwxrwxrwt ....

确保settings.py中指定的数据库路径是完整的 路径。


17
投票

我通过将 DATABASE_NAME 更改为绝对路径解决了该错误:

/var/www/apps/apps.db

在 Windows 机器上,反斜杠应该转义,如:

C:\\path\\to\\database\\database_name.db


6
投票

DATABASE_NAME 已弃用。您必须使用当前支持的格式。 即

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': 'C:/ispdb.sqlite',
    'USER': '',
    'PASSWORD': '',
    'HOST': '',
    'PORT': ''

}

还可以查看 django 网站已弃用的其他设置。:))


4
投票

对于我的 Linux 系统,我必须向进程所有者授予对 db.sqlite3 和包含它的 directory 的写入权限!你可以直接 setfacl 来代替!示例:(https://serverfault.com/questions/484818/best-way-to-set-up-permissions-with-nginx-php-fpm-on-shared-hosting)。

(py2.7)[me@server django-project-container]$ ls -la djangoproject/

drwxrwxr-x. 6 root nginx  4096 Jun 14 01:05 .
drwxr-xr-x. 6 root root  4096 Jun 13 23:47 ..
-rwxrwxrwx. 1 root nginx 49152 Jun 14 01:05 db.sqlite3

3
投票

嗯,这个问题我已经回答过了。 http://goo.gl/KAuXz

我遇到了完全相同的问题。这是我的设置,有效。

'ENGINE': 'django.db.backends.sqlite3', 
'NAME': '/home/neo/django/db/data.sqlite3'

sqlite3 的其他设置将相同/默认。


1
投票

只需用 .sqlite3 扩展名重命名数据库文件,这对我有用。


0
投票

要更改父目录的权限,您可以使用以下命令集:

检查 apache v2 的 apache 进程:

ps -ef | grep apache | grep -v grep

用户/组是www-data

chgrp www-data /path/to/mydir
chmod g+w /path/to/mydir

参考:https://askubuntu.com/questions/58725/how-do-we-know-that-a-directory-is-apache-writable


0
投票

检查该文件夹是否在 Windows 勒索软件防护中。如果有的话请将其删除。


0
投票

我在使用 Docker 时遇到了这个问题。我需要在 compose.yaml 中的 docker 服务器服务中设置“卷”。我的文件如下所示:

services:
  server:
    build:
      context: .
    volumes:
      - .:/app
    ports:
      - 8000:8000
© www.soinside.com 2019 - 2024. All rights reserved.