Problème de création de base de données avec Flask sous Windows 11
Bonjour ,
Je n'arrive pas à creer ma base de donnée todo.db
(voir le tuto sur flask ci dessous
ci dessous le message d'erreur sachant que je suis sous windows 11 et pas sur mac
>>> from app import db,Task
>>> db.create_all()
Traceback (most recent call last):
File "<python-input-2>", line 1, in <module>
db.create_all()
~~~~~~~~~~~~~^^
File "C:\Users\Antunes Sebastien\Desktop\Dashboard\BOOTSTRAP en partant de 0\todo_app\.env\Lib\site-packages\flask_sqlalchemy\extension.py", line 900, in create_all
self._call_for_binds(bind_key, "create_all")
~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Antunes Sebastien\Desktop\Dashboard\BOOTSTRAP en partant de 0\todo_app\.env\Lib\site-packages\flask_sqlalchemy\extension.py", line 871, in _call_for_binds
engine = self.engines[key]
^^^^^^^^^^^^
File "C:\Users\Antunes Sebastien\Desktop\Dashboard\BOOTSTRAP en partant de 0\todo_app\.env\Lib\site-packages\flask_sqlalchemy\extension.py", line 687, in engines
app = current_app._get_current_object() # type: ignore[attr-defined]
File "C:\Users\Antunes Sebastien\Desktop\Dashboard\BOOTSTRAP en partant de 0\todo_app\.env\Lib\site-packages\werkzeug\local.py", line 519, in _get_current_object
raise RuntimeError(unbound_message) from None
RuntimeError: Working outside of application context.
This typically means that you attempted to use functionality that needed
the current application. To solve this, set up an application context
with app.app_context(). See the documentation for more information.
>>>
Je n'aie pas compris non plus comment exporter mes variables d'environnement sous windows 11
set FLASK_APP=app.py
set FLASK_ENV=development
Pouvez vous débloquer la situation ?
Merci ...
Salut :)
En fait tu dois exécuter ton code dans un context :
def create_app():
app = Flask(__name__)
with app.app_context():
init_db()
return app
Ils en parlent ici dans la doc : https://flask.palletsprojects.com/en/stable/appcontext/
A mon avis ta commande est "hors-contexte" pour flask. Tu as ton exemple de code ?
le code est ici
c'est un tutorial
https://www.docstring.fr/blog/creer-une-todo-app-avec-flask/
le code que j'incrimine est la ligne
db.create_all()
qui ne me créer pas mon fichier todo.db .
J'arrive à passer outre cette ligne en tapant la commande
flask shell
mais je me fait rattraper dans mon terminal lorsque je tape
sqlite3 todo.db
sqlite> .table # cette ligne me creer mon fichier todo.db alors que ce n'est pas ce que je lui demande de faire
en fait , je n'arrive pas à crée mon fichier todo.db correctement et je n'arrive pas à appeler la class "Task" .
Et logiquement les commandes sqlite>.table me répondent qu'il n'y a pas de table crée .
ci dessous mes frappes claviers
C:\Users\Antunes Sebastien\Desktop\Dashboard\BOOTSTRAP en partant de 0\todo_app\.env> flask shell
Python 3.13.0 (tags/v3.13.0:60403a5, Oct 7 2024, 09:38:07) [MSC v.1941 64 bit (AMD64)] on win32
App: app
Instance: C:\Users\Antunes Sebastien\Desktop\Dashboard\BOOTSTRAP en partant de 0\todo_app\.env\var\app-instance
>>> from app import db, Task
>>> db.create_all()
>>> exit()
now exiting InteractiveConsole...
PS C:\Users\Antunes Sebastien\Desktop\Dashboard\BOOTSTRAP en partant de 0\todo_app\.env> sqlite3 .\todo.db
SQLite version 3.47.2 2024-12-07 20:39:59
Enter ".help" for usage hints.
sqlite> .table
sqlite> .table
sqlite>
.
Re,
alors regarde :)
# todo_app/app.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
app = Flask(__name__) # Crée un instance de la classe Flask, c'est notre app
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///todo.db' # Nom de la bdd
db = SQLAlchemy(app) # Lie notre app à SQLAlchemy
class Task(db.Model): # Modèle
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50), nullable=False)
created_at = db.Column(db.DateTime, nullable=False, default=datetime.now)
@app.route("/")
def index(): # Méthode appelée quand on se rend sur la route "/"
return "Hello World!"
if __name__ == '__main__':
app.run(debug=True)
Ici le app.run me permet de me passer des exports.
Et ma base de donnée est bien présente quand j'exécute :
Mais comme tu peux le voir, je le fais dans le contexte de mon application, sinon j'ai l'erreur que tu as mentionné tout à l'heure.
On peut voir que la structure de ma base est bien présente aussi :
Aussi, fait bien attention que ton environnement virtuel est bien activé, et que les librairies :
pip install flask
pip install flask_sqlalchemy
Est-ce que c'est bon pour toi ?
Bonjour , Oui cela fonctionne à present mais j'aie du compléter les imports avec
from app import db,Task,app
Si j'omet un des db , Task ou app cela ne fonctionne pas .
De plus la base de donnée a bien été crée mais dans un dossier "var"/"app-instance" .Je ne
sais pas trop pourquoi et je m'en suis aperçu par hasard .
La preuve par le contenu de mon terminal , je peux recoller à la suite du tutorial .
```
PS C:\Users\Antunes Sebastien\Desktop\Dashboard\BOOTSTRAP en partant de 0\todo_app.env\Scripts> .\activate
(.env) PS C:\Users\Antunes Sebastien\Desktop\Dashboard\BOOTSTRAP en partant de 0\todo_app.env\Scripts> cd ..
(.env) PS C:\Users\Antunes Sebastien\Desktop\Dashboard\BOOTSTRAP en partant de 0\todo_app.env> python
Python 3.13.0 (tags/v3.13.0:60403a5, Oct 7 2024, 09:38:07) [MSC v.1941 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
from app import db,Task
with app.app_context():
... db.create_all()
...
Traceback (most recent call last):
File "<python-input-1>", line 1, in <module>
with app.app_context():
^^^
NameError: name 'app' is not defined
from app import db,Task,app
with app.app_context():
... db.create_all()
...
exit()
(.env) PS C:\Users\Antunes Sebastien\Desktop\Dashboard\BOOTSTRAP en partant de 0\todo_app.env> cd .\var\
(.env) PS C:\Users\Antunes Sebastien\Desktop\Dashboard\BOOTSTRAP en partant de 0\todo_app.env\var> cd .\app-instance\
(.env) PS C:\Users\Antunes Sebastien\Desktop\Dashboard\BOOTSTRAP en partant de 0\todo_app.env\var\app-instance> sqlite3 .\todo.db
SQLite version 3.47.2 2024-12-07 20:39:59
Enter ".help" for usage hints.
sqlite> .table
task
sqlite> .schema task
CREATE TABLE task (
id INTEGER NOT NULL,
name VARCHAR(50) NOT NULL,
created_at DATETIME NOT NULL,
PRIMARY KEY (id)
);
sqlite></module></python-input-1>
```
Salut,
Oui pour l'import db
je l'avais importé plus haut dans le terminal. Du coup j'ai oublié de te le spécifier.
Si c'est ok pour toi c'est top.
Si tu veux customiser le chemin de la BDD tu peux jouer avec :
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///todo.db' # Nom de la bdd
A bientôt
Merci chef !
Inscris-toi
(c'est gratuit !)

Tu dois créer un compte pour participer aux discussions.
Créer un compte person