Lien du didacticiel: http://flask.pocoo.org/docs/0.11/tutorial/dbinit/#tutorial-dbinit
Je suis le tutoriel Flask. Ceci est la configuration actuelle de mon script python. À la fin du didacticiel, j'essaie d'initialiser la base de données. Mais pour une raison quelconque, j'ai continué à avoir la même erreur.
# all the imports
import os
import sqlite3
from flask import Flask, request, session, g, redirect, url_for, abort, \
render_template, flash
# create our little application :)
app = Flask(__name__)
app.config.from_object(__name__)
# Load default config and override config from an environment variable
app.config.update(dict(
DATABASE=os.path.join(app.root_path, 'flaskr.db'),
SECRET_KEY='development key',
USERNAME='admin',
PASSWORD='default'
))
app.config.from_envvar('FLASKR_SETTINGS', silent=True)
def connect_db():
"""Connects to the specific database."""
rv = sqlite3.connect(app.config['DATABASE'])
rv.row_factory = sqlite3.Row
return rv
def init_db():
db = get_db()
with app.open_resource('schema.sql', mode='r') as f:
db.cursor().executescript(f.read())
db.commit()
@app.cli.command('initdb')
def initdb_command():
"""Initializes the database."""
init_db()
print 'Initialized the database.'
def get_db():
"""Opens a new database connection if there is none yet for the
current application context.
"""
if not hasattr(g, 'sqlite_db'):
g.sqlite_db = connect_db()
return g.sqlite_db
@app.teardown_appcontext
def close_db(error):
"""Closes the database again at the end of the request."""
if hasattr(g, 'sqlite_db'):
g.sqlite_db.close()
C'est l'entrée de ma commande:
flask initdb
C'est la sortie:
Usage: flask [OPTIONS] COMMAND [ARGS]...
Error: No such command "initdb"
Je pense que vous devriez suivre ceci:
éditez la configuration dans le fichier flaskr.py
ou exporter une variable d'environnement FLASKR_SETTINGS
pointant vers un fichier de configuration.
installer l'application à la racine du répertoire du projet
pip install --editable .
Demander au flacon d'utiliser la bonne application
export FLASK_APP=flaskr
initialiser la base de données avec cette commande:
flask initdb
maintenant vous pouvez lancer flaskr:
flask run
Faites attention à installer --editable
correctement. Je ne vois pas le "." la première fois.
l'expression correcte devrait être:
export FLASK_APP=flaskr.py
Couru dans le même problème, corrigé avec
python3 -m flask initdb
Je devais tout faire pour le tutoriel avec python -m flask <command>
Je devine que c'est quelque chose à voir avec python3 au lieu de python2 mais je suis nouveau sur python, donc je ne suis pas vraiment sûr.
Dans mon cas, les travaux suivants:
export FLASK_APP = flaskr.flaskr
fiole initdb
Le problème pourrait également être le __init.py__
étant situé dans le dossier racine. La réponse de vuongbui est la bonne, étant donné que __init.py__
se trouve dans flaskr/flaskr et non à la racine.
J'ai eu le même problème - ce qui a fonctionné pour moi a été de réexécuter la commande ci-dessous dans ma session Shell actuelle.
pip install --editable .
J'ai également rencontré ce problème en essayant d'ajouter l'exemple de commande à mon projet, mais c'était parce que ma commande Flask ne se trouvait pas dans le même fichier que mon application principale. J'essayais de le placer dans son propre fichier autonome.
Lorsque je le mets dans mon fichier d'application principal (ce serait flaskr.py
dans l'exemple du questionneur), alors flask
le trouvera.
J'ai ensuite essayé d'atteindre le même résultat (commande dans un fichier séparé) en utilisant Blueprints mais malheureusement, les commandes dans Blueprints sont pas encore supportées .
Vous devez arrêter la session actuelle du flacon s'il est toujours en cours d'exécution. Voici comment j'ai résolu mon problème.
J'ai résolu en regardant la documentation ici: http://flask.pocoo.org/docs/1.0/tutorial/database/
click.command()
définit une commande en ligne de commande appelée "init-db"
Après avoir vu cela, j'ai exécuté la commande flask init-db. Le retour "Initialized the database" a été renvoyé.