Не удается инициализировать флягу initdb (учебник по фляге Step4)

Ссылка на учебное пособие: http://flask.pocoo.org/docs/0.11/tutorial/dbinit/#tutorial-dbinit

Я следую учебнику Flask. Это текущая настройка моего python script. В конце учебника я пытаюсь инициализировать базу данных. Но по какой-то причине я продолжал получать ту же ошибку.

# 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()

Это ввод моей команды:

flask initdb

Это вывод:

Usage: flask [OPTIONS] COMMAND [ARGS]...

Error: No such command "initdb"

Ответ 1

Я думаю, вы должны следовать этому:

  • отредактируйте конфигурацию в файле flaskr.py или  экспортировать переменную окружения FLASKR_SETTINGS  указывая на файл конфигурации.

  • установите приложение из корня каталога проекта

    pip install --editable .
    
  • Поставьте флажок для использования правильного приложения

    export FLASK_APP=flaskr
    
  • инициализируйте базу данных с помощью этой команды:

    flask initdb
    
  • теперь вы можете запустить flaskr:

    flask run
    

Обратите внимание на правильность установки --editable. Я не вижу "." в первый раз.

Ответ 2

правильное выражение должно быть:

export FLASK_APP=flaskr.py

Примечание. Вокруг = нет пробелов.

На следующем скриншоте показаны результаты с другим envvar FLASK_APP:

screenshot

Ответ 3

В этом же выпуске исправлено его с помощью

python3 -m flask initdb

Мне нужно было сделать все для учебника с помощью python -m flask <command>

Я предполагаю, что это что-то связано с python3 вместо python2, но я новичок в python, поэтому не уверен.

Ответ 4

В моем случае следующие работы:

export FLASK_APP = flaskr.flaskr

колба initdb

Ответ 5

У меня была такая же проблема - для меня работала повторная команда ниже в моем текущем сеансе оболочки.

pip install --editable .

Ответ 6

У меня также возникла эта проблема при попытке добавить команду example в мой проект, но это было потому, что моя команда Flask не была в том же файле, что и мое основное приложение - я пытался поместить его в свой собственный отдельный файл.

Когда я помещаю его в свой основной файл приложения (будет flaskr.py в примере опроса), тогда flask найдет его.

Затем я попытался достичь того же конца (команда в отдельном файле), используя Blueprints, но, к сожалению, команды в "Чертежах" еще не поддерживается.

Ответ 7

Проблема также может заключаться в том, что __init.py__ находится в корневой папке. Ответ vuongbui правильный, учитывая, что __init.py__ находится в flaskr/flaskr, а не в корне.

Ответ 8

Вам нужно остановить текущий сеанс фляжки, если он все еще работает. Вот как я решил свою проблему.

Ответ 9

Я решил, посмотрев документацию здесь: http://flask.pocoo.org/docs/1.0/tutorial/database/

click.command() 

определяет команду командной строки под названием "init-db"

После того, как я увидел это, я выполнил команду flask init-db и получил возврат "Initialized the database".

Ответ 10

Я попытался сделать учебник, и столкнулся с этой проблемой.

Я не уверен, что произошли изменения во Flask, но согласно их инструкциям, основной файл Python называется __init__.py. Для того чтобы я успешно запустил init-db, мне пришлось сделать export FLASK_APP=__init__.py. Мой каталог папок назывался pythonflask, но когда я попытался выполнить export FLASK_APP=pythonflask (в соответствии с их инструкциями вызова каталога flaskr а затем выполнить export FLASK_APP=flaskr), я export FLASK_APP=flaskr с проблемой. Однако выполнение export FLASK_APP=__init__.py позволило мне запустить export FLASK_APP=__init__.py flask init-db.

Надеюсь это поможет!

РЕДАКТИРОВАТЬ: То, что я поиграл и понял, что я пытался использовать свою root папку в качестве FLASK_APP. После того, как я создал новый каталог в своем корневом каталоге, я смог экспортировать этот каталог. Моя структура папок выглядит следующим образом:

pythonflask (root)
    |
     app
        __init__.py

Теперь, когда я export FLASK_APP=app, я могу без проблем запустить flask init-db.

Ответ 11

У меня была точно такая же проблема, точно следуя инструкции. Я запустил export FLASK_APP=flaskr. Чтобы запустить flask init-db, перейдите в каталог над flaskr (в случае учебника - flask-tutorial).

Когда я запускаю tree (и очищаю кеш и привет файлы из учебника), я получаю:

.
├── flaskr
│   ├── __init__.py
│   ├── db.py
│   └── schema.sql
└── instance
    └── flaskr.sqlite

Где я запускаю flask init-db в . ,

Ответ 12

Я знаю, что это старо, но только для тех, у кого все еще есть эта проблема, как я сделал вчера.

Моя проблема была __init__.py Я не поместил этот учебный код прямо перед return app:

from . import db
db.init_app(app)