web-dev-qa-db-fra.com

Impossible d'initialiser le flask initdb (Flask Tutorial Step4)

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"
11
YAL

Je pense que vous devriez suivre ceci:

  1. éditez la configuration dans le fichier flaskr.py ou exporter une variable d'environnement FLASKR_SETTINGS pointant vers un fichier de configuration.

  2. installer l'application à la racine du répertoire du projet

    pip install --editable .
    
  3. Demander au flacon d'utiliser la bonne application

    export FLASK_APP=flaskr
    
  4. initialiser la base de données avec cette commande:

    flask initdb
    
  5. maintenant vous pouvez lancer flaskr:

    flask run
    

Faites attention à installer --editable correctement. Je ne vois pas le "." la première fois.

10
vuongbui

l'expression correcte devrait être:

export FLASK_APP=flaskr.py

les sorties avec envvar différente FLASK_APP

4
pumpkindle

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.

3
Sam

Dans mon cas, les travaux suivants:

export FLASK_APP = flaskr.flaskr

fiole initdb

2
Larry

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.

1
b33blebrox

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 .
1
1up

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 .

1
Sam

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. 

0
Abang F.

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é.

0
zenthad