Python3.8.1
on alpine linux 3.11
on Docker
Ich habe den folgenden Code geschrieben und erwartet, dass eine DB-Datei in / var / data
erstellt wird
engine = create_engine("sqlite:///var/data/project.sqlite3")
...
Als ich es ausführte, war ich wütend, dass ich die Datenbankdatei nicht öffnen konnte
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) unable to open database file
/ var / data
stellt das Verzeichnis auf der Seite des Host-Betriebssystems in den Container ein, aber die Testdatei
, die durch die Operation auf der Seite des Host-Betriebssystems erstellt wurde, sieht auch korrekt aus.
# ls -la /var/data/
total 16
drwxrwxr-x 2 1006 1006 4096 Apr 11 00:41 .
drwxr-xr-x 1 root root 4096 Apr 11 00:41 ..
-rw-r--r-- 1 root root 0 Apr 11 00:41 testfile
Ich bezweifelte, wie ich den Pfad angeben sollte, und überprüfte das offizielle Dokument.
SQLite — SQLAlchemy 1.3 Documentation
This means that the actual filename to be used starts with the characters to the right of the third slash.
e = create_engine('sqlite:///path/to/database.db')
Relative Pfade sind Schrägstriche ** 3 **.
> An absolute path, which is denoted by starting with a slash, means you need **four** slashes
> ```python
# absolute path
e = create_engine('sqlite:////path/to/database.db')
Wenn Sie einen absoluten Pfad verwenden möchten, gibt es ** 4 Schrägstriche **.
orz...
Was ich tun wollte, war den ** absoluten Pfad ** zu / var / data / project.sqlite3
anzugeben, also
sqlite:///var/data/project.sqlite3
Stattdessen musste es wie folgt angegeben werden
sqlite:////var/data/project.sqlite3
engine = create_engine("sqlite:////var/data/project.sqlite3")
...
Herzlichen Glückwunsch zum Korrigieren des Codes und er funktioniert jetzt korrekt.
Recommended Posts