--Je veux utiliser SQLite3 avec SQLAlchemy --Je veux spécifier le fichier DB avec un chemin absolu
Python3.8.1
on alpine linux 3.11
on Docker
J'ai écrit le code suivant, en m'attendant à ce qu'un fichier DB soit créé dans / var / data
engine = create_engine("sqlite:///var/data/project.sqlite3")
...
Quand je l'ai exécuté, j'étais en colère de ne pas pouvoir ouvrir le fichier de base de données
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) unable to open database file
/ var / data
monte le répertoire du côté du système d'exploitation hôte sur le conteneur, mais le" fichier de test "créé par l'opération du côté du système d'exploitation hôte semble également correct.
# 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
J'ai douté de la manière de spécifier le chemin et j'ai vérifié le document officiel.
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')
Les chemins relatifs sont des barres obliques ** 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')
Si vous souhaitez utiliser un chemin absolu, il y a ** 4 barres obliques **.
orz...
Ce que je voulais faire était de spécifier le ** chemin absolu ** vers / var / data / project.sqlite3
, donc
sqlite:///var/data/project.sqlite3
Au lieu de cela, il a dû être spécifié comme suit
sqlite:////var/data/project.sqlite3
engine = create_engine("sqlite:////var/data/project.sqlite3")
...
Félicitations pour la correction du code et il fonctionne maintenant correctement.
Recommended Posts