web-dev-qa-db-ja.com

sqlite3.OperationalError:データベースファイルを開けません

Djangoでサーバーをセットアップすると、このエラーが発生します。 sqlite3であるため、.dbファイルを作成する必要がありますが、作成していないようです。 SQLiteをバックエンドとして指定し、それを配置する場所の絶対ファイルパスを指定しましたが、運はありません。

これはバグですか、何か間違っていますか? (ちょうど考えていたのですが、Ubuntuでは絶対ファイルパスの指定が異なりますか?)

これが私のsettings.pyファイルの始まりです:

# Django settings for OmniCloud project.

DEBUG = True
TEMPLATE_DEBUG = DEBUG

ADMINS = (
# ('Your Name', '[email protected]'),
)

MANAGERS = ADMINS

DATABASES = {
'default': {
    'ENGINE': 'Django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'Oracle'.
    'NAME': '~/Harold-Server/OmniCloud.db',                      # Or path to database file if using sqlite3.
    'USER': '',                      # Not used with sqlite3.
    'PASSWORD': '',                  # Not used with sqlite3.
    'Host': '',                      # Set to empty string for localhost. Not used with sqlite3.
    'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
}
}
41
Chris

Django NewbieMistakes

問題SQLite3を使用している場合、DATABASE_NAMEはデータベースファイルのフルパスに設定され、データベースファイルはApacheによって書き込み可能ですが、上記のエラーが引き続き発生します。

解決策Apacheがデータベースの親ディレクトリにも書き込むことができることを確認してください。 SQLiteはこのディレクトリに書き込むことができる必要があります。

データベースファイルのフルパスの各フォルダーが数字で始まっていないことを確認してください。/www/4myweb/db(Windows 2000で観察)。

DATABASE_NAMEが「/ Users/yourname/Sites/mydjangoproject/db/db」などのように設定されている場合は、必ず「db」ディレクトリを作成してください。

/ tmpディレクトリが誰でも書き込み可能であることを確認してください(システム上の他のものも機能しないため、考えられない原因です)。 ls/tmp -aldはdrwxrwxrwt ...を生成するはずです。

Settings.pyで指定されたデータベースへのパスがフルパスであることを確認してください。

また、ファイルが予想される場所に存在することを確認してください。

74
John

私はまったく同じ問題に直面しました。これがうまくいった私の設定です。

'ENGINE': 'Django.db.backends.sqlite3', 
'NAME': '/home/path/to/your/db/data.sqlite3'

Sqlite3の場合のその他の設定は、同じ/デフォルトになります。
そして、data.sqlite3を作成する必要があります。

19
chhantyal

絶対パスを指定していません-ショートカット~を使用しましたが、このコンテキストでは機能しない可能性があります。代わりに/home/yourusername/Harold-Server/OmniCloud.dbを使用してください。

8
Daniel Roseman

~/の代わりにフルパスを使用する必要があります。

あなたの場合、/home/harold/Harold-Server/OmniCloud.dbのようなものです。

私の場合、sqlite dbファイルdb.sqlite3はApacheのDocumentRootに保存されていました。そのため、次の権限を設定した後でも機能しませんでした。

Sudo chown www-data:www-data /path/to/db-folder
Sudo chown www-data:www-data /path/to/db-folder/sqlite-db.db

最後に、db.sqlite3dbfolderの下の新しく作成されたフォルダーDocumentRootに移動し、上記のアクセス許可を与えると、機能しました。

3
learningloop

このタイプを使用してください。 python 2.7およびDjango 1.5のWindows 7

'ENGINE': 'Django.db.backends.sqlite3',
'NAME': 'C:\\tool\\mysite\\data.db',

その作品を願っています...

0
Yogendra Sharma