教程链接:http://flask.pocoo.org/docs/0.11/tutorial/dbinit/#tutorial-dbinit
我正在关注Flask教程。这是我的python脚本的当前设置。在本教程结束时,我正在尝试初始化数据库。但由于某种原因,我继续得到同样的错误。
# 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"
我想你应该遵循这个:
flaskr.py
文件中的配置或导出指向配置文件的FLASKR_SETTINGS
环境变量。pip install --editable .
export FLASK_APP=flaskr
flask initdb
flask run
注意正确安装--editable
。我没有看到“。”第一次。
我也尝试过做这个教程,并遇到了这个问题。
我不确定Flask是否有变化,但根据他们的指示,主要的Python文件名为__init__.py
。为了让我成功地运行init-db
,我不得不做export FLASK_APP=__init__.py
。我的文件夹目录名为pythonflask
,但是当我尝试执行export FLASK_APP=pythonflask
时(根据他们调用目录flaskr
然后执行export FLASK_APP=flaskr
的说明),我遇到了问题。然而,做export FLASK_APP=__init__.py
允许我运行flask init-db
。
希望这可以帮助!
编辑:我玩的东西,并意识到我试图使用我的root
文件夹作为FLASK_APP
。一旦我在根目录中创建了一个新目录,我就能够导出该目录。我的文件夹结构现在看起来像这样:
pythonflask (root)
|
app
__init__.py
现在当我做export FLASK_APP=app
时,我能够毫无问题地运行flask init-db
。
我完全按照教程完成了同样的问题。我跑过export FLASK_APP=flaskr
。要运行flask init-db
,请导航到flaskr
上面的目录(对于本教程的情况,flask-tutorial
)。
当我运行tree
(并从教程中减去缓存和hello文件)时,我得到:
.
├── flaskr
│ ├── __init__.py
│ ├── db.py
│ └── schema.sql
└── instance
└── flaskr.sqlite
我在flask init-db
运行.
的地方。
我知道这已经过时了,但对于那些仍然像我昨天那样仍有这个问题的人来说。
我的问题是__init__.py
我没有把这个教程代码放在return app
之前:
from . import db
db.init_app(app)
进入相同的问题,修复它
python3 -m flask initdb
我必须用python -m flask <command>
为教程做一切
我猜它与python3而不是python2有关,但我是python的新手所以不太确定。
在我的情况下,以下工作:
export FLASK_APP = flaskr.flaskr
flask initdb
我有同样的问题 - 对我有用的是在我当前的shell会话中重新运行下面的命令。
pip install --editable .
尝试将示例命令添加到我的项目时,我也遇到了这个问题,但这是因为我的Flask命令与我的主应用程序不在同一个文件中 - 我试图将它放在自己的独立文件中。
当我把它放入我的主应用程序文件(在提问者的例子中将是flaskr.py
)时,flask
找到它。
然后我尝试使用Blueprints实现相同的结束(在单独的文件中的命令)但不幸的是蓝图中的命令是not supported yet。
问题也可能是位于根文件夹中的__init.py__
。鉴于__init.py__
位于flaskr / flaskr而非根部,vuongbui的答案是正确的。
如果仍在运行,您需要停止当前的烧瓶会话。这就是我解决问题的方法。
我通过查看这里的文档解决了:http://flask.pocoo.org/docs/1.0/tutorial/database/
click.command()
定义一个名为“init-db”的命令行命令
在我看到这个后,我运行了flask init-db命令,我得到了“Initialized the database”返回。