2010-07-19 98 views
32

我得到一个错误,提示“无法打开数据库文件”。运行“python manage.py syncdb”后,Django“无法打开数据库文件”

这里是从我的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的数据”没工作,要么

[编辑]

确保www数据可以访问所有这一切,我做了以下内容:

做了以下内容:

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

,但它仍然无法正常工作:(

+0

确保WWW的数据可以遍历整个路径到你的数据库,而不是仅仅读/写入db文件。 – 2010-07-19 11:11:29

回答

16

我通过改变解决了这个错误将DATABASE_NAME改为绝对路径:/var/www/apps/apps.db

在Windows机器上,反斜杠应该像下面这样转义出来:C:\\path\\to\\database\\database_name.db

+0

如果我试图通过网络访问数据库,路径以“\\ MyMachine \ ...”开头,路径转换为“\\\\ MyMachine \\ ...”。然后我无法打开连接,我得到“无法打开数据库文件”。即使数据库在我的机器上,我只是试图以不同的方式访问它。 – gajo357 2014-03-11 10:16:46

45

Solution from NewbieMistakes

确保阿帕奇也可以写信给 数据库的父目录。 SQLite需要能够写入这个目录。

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

如果DATABASE_NAME设置为类似 '/用户/提供yourname /网站/ mydjangoproject /的db/db',确保你已经 创建的 'DB' 目录第一。

确保你的/ tmp目录是世界可写的(一个不太可能的原因,因为 系统上的其他东西也不起作用)。 ls/tmp -ald应该生成drwxrwxrwt的 ....

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

+14

父目录权限不明显(对我而言);谢谢。 – 2013-04-02 22:42:10

+1

还有一个FAQ条目[这里](https://code.djangoproject.com/wiki/NewbieMistakes#DjangosaysUnabletoOpenDatabaseFilewhenusingSQLite3)。 – m01 2013-08-06 06:51:14

3

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

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

} 

而且也看到这是从Django的网站弃用其他设置。:))

1

好吧,我回答了这个问题。 http://goo.gl/KAuXz

我面临完全相同的问题。这是我的设置工作。

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

在sqlite3的情况下,其他设置将是相同/默认。

2

对于我的Linux系统,我不得不放弃进程所有者写权限既db.sqlite3和包含它的目录!您可以改为setfacl!例如:(https://serverfault.com/questions/484818/best-way-to-set-up-permissions-with-nginx-php-fpm-on-shared-hosting)。

(py2.7)[我@服务器djangoproject容器] $ 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 
相关问题