発生している問題・エラーメッセージ
sqlite3.OperationalError: unable to open database file
該当のソースコード
Aディレクトリ直下にutilsディレクトリ, modelディレクトリがあり、utilsディレクトリに以下コードが記載されているファイル(test.py)があり、modelディレクトリの直下にtest.dbがあります。
python
1# test.py 2import sqlite3 3import os.path 4 5filepath = os.path.abspath("../model/test.db") 6conn = sqlite3.connect(filepath)
試したこと
- 相対パスではなく絶対パスにした方が良いという記事を見たので上記のように絶対パスを渡したが変わらず
- パーミッション周りが足りないという記事を見たので書き込み権限を
test.dbファイル,modelディレクトリ両方変えたが変わらず
bash
1drwxrwxrwx@ 5 hogehoge staff 160 8 23 19:05 model 2-rwxrwxrwx@ 1 hogehoge staff 21733376 3 27 2020 model/test.db
補足情報(FW/ツールのバージョンなど)
- macOS 10.14.5
- Python 3.7.4
test.pyを実行するとエラーが出るのですが、解決策をご存知の方がいらっしゃいましたら教えていただきたいです????♀️
connectの前にprint(filepath)を入れてみて、正しいファイルパスになっているか確認できますでしょうか?
正しいファイルパスでした!
既存のtest.dbではなく、新規のdbファイルでやってみてください。
失敗はしませんか?正しく新しいファイルが作成されていますか?
また、コマンドラインから、sqlite3コマンドでdbファイルに接続してみてください
% sqlite3 ../model/test.db
sqlite> .datebase とすると、どうなりますでしょうか?(.quit で終了)
あと、念のため、ファイルとディレクトリの拡張メタデータを削除できますでしょうか?
https://rensrv.com/macos/remove-at/
削除した後に+の拡張ACLが残っていれば、それも削除ください。
https://rensrv.com/macos/remove-plus/
返信が遅れてしまいすみません(PCが壊れてしまい買い換えていました)
> 既存のtest.dbではなく、新規のdbファイルでやってみてください。
失敗はしませんか?正しく新しいファイルが作成されていますか?
これは既存のtest.dbを消して実行した時に新しくtest.dbが生成されるかどうかということでしょうか?
それに関しては特に新しく生成されませんでした。
> sqlite3 ../model/test.db
sqlite> .datebase とすると、どうなりますでしょうか?
「main: /path/model/test.db」というのが出力されます
> あと、念のため、ファイルとディレクトリの拡張メタデータを削除できますでしょうか?
こちらを実行したところ、test.db, model両方とも@や+なども消せ問題なさそうでした
以上実行したのですが、変わらず同じエラーが出てしまいます。
新しいdbを指定するとサイズ0のファイルが生成されるのですが・・・不思議ですね。エラーは出ませんでしたか?
流れとしては、
1. test.dbをfinderから削除
2. test.pyを実行
3. test.dbは作成されず、ターミナルに以下のエラーがでる
```
File "/path/test.py", line 29, in convert
conn = sqlite3.connect(filepath)
sqlite3.OperationalError: unable to open database file
```
と行った感じです、、????♀️
エラーは出るのですね。sqlite3のコマンドでは問題無いので、pythonからの権限がそのディレクトリに無いように見えます。
../model/test.db ではなく test.db だけにして、カレントディレクトリのtest.db (存在しない)はオープンできますか?さらにそれが失敗するなら、pythonを対話形式で起動して実行してみるとどうでしょうか?
test.dbだけにしたところ行けました!!!
どうやらおっしゃる通り、Pythonからの権限がないっぽかったです。
SQLite3とPythonそれぞれで実行して原因の切り分けをしていくのが大変参考になりました。ありがとうございました!
回答2件
あなたの回答
tips
プレビュー