Не удается инициализировать флягу 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)