Django“无法打开数据库文件”
Posted
技术标签:
【中文标题】Django“无法打开数据库文件”【英文标题】:Django is "unable to open database file" 【发布时间】:2011-03-17 20:48:22 【问题描述】:运行“python manage.py syncdb”后,我收到一条错误消息“无法打开数据库文件”。
这是我的 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
但是还是不行:(
【问题讨论】:
确保 www-data 可以通过整个路径到达您的 db,而不仅仅是读取/写入 db 文件。 【参考方案1】:只需用 .sqlite3 扩展名重命名数据库文件,这对我有用。
【讨论】:
【参考方案2】:要更改父目录的权限,您可以使用以下命令集:
检查 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
【讨论】:
【参考方案3】:对于我的 linux 系统,我必须授予进程所有者对 db.sqlite3 和包含它的 目录 的写入权限!您可以改为 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
【讨论】:
【参考方案4】:Solution from NewbieMistakes
确保 Apache 也可以写入 数据库。 SQLite 需要能够写入此目录。
确保您的数据库文件的完整路径的每个文件夹都没有启动 带数字,例如。 /www/4myweb/db(在 Windows 2000 上观察)。
如果 DATABASE_NAME 设置为类似 '/Users/yourname/Sites/mydjangoproject/db/db',确保你已经 首先创建了 'db' 目录。
确保您的 /tmp 目录是全局可写的(不太可能的原因是 您系统上的其他东西也将不起作用)。 ls /tmp -ald 应该 产生 drwxrwxrwt ....
确保 settings.py 中指定的数据库路径是完整的 路径。
【讨论】:
父目录权限不明显(对我来说);谢谢。 还有一个FAQ条目here。 那么我真的应该在包含数据库的目录上触发chmod 777
吗?【参考方案5】:
我通过将 DATABASE_NAME 更改为绝对路径解决了错误:/var/www/apps/apps.db
。
在 Windows 机器上,反斜杠应转义为:C:\\path\\to\\database\\database_name.db
。
【讨论】:
如果我试图通过网络访问数据库并且路径以 "\\MyMachine\..." 开头,它转换为 "\\\\MyMachine\\..." 怎么办。然后我无法打开连接,我得到“无法打开数据库文件”。即使数据库在我的机器上,我也只是尝试以不同的方式访问它。【参考方案6】:嗯,我回答了这个问题。 http://goo.gl/KAuXz
我遇到了完全相同的问题。这是我的设置。
'ENGINE': 'django.db.backends.sqlite3',
'NAME': '/home/neo/django/db/data.sqlite3'
sqlite3 的其他设置将相同/默认。
【讨论】:
【参考方案7】:DATABASE_NAME 已弃用。您必须使用当前支持的格式。 即
DATABASES =
'default':
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'C:/ispdb.sqlite',
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': ''
还可以查看 django 网站上已弃用的其他设置。:))
【讨论】:
以上是关于Django“无法打开数据库文件”的主要内容,如果未能解决你的问题,请参考以下文章
OperationalError at / 无法打开数据库文件偶尔出现