OperationalError dans SQLAlchemy + SQLite3

Chose que tu veux faire

--Je veux utiliser SQLite3 avec SQLAlchemy --Je veux spécifier le fichier DB avec un chemin absolu

environnement

Python3.8.1 on alpine linux 3.11 on Docker

Qu'est-il arrivé

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

Enquête

/ 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

Solution

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.

relative path

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

OperationalError dans SQLAlchemy + SQLite3
Sqlite en Python
Dans python + sqlite3 "OperationalError: no such column:"
Définition de table dans SQL Alchemy
Type de gain de temps avec SQLAlchemy
Comment gérer une session dans SQLAlchemy
Comment utiliser SQLite en Python
(sqlalchemy) Afficher le texte dans le champ de sélection
Démarrez avec SQLite dans un langage de programmation
Clé étrangère dans SQLite de Python [Note]
sqlalchemy
Code requis pour la conversion d'API dans sqlalchemy