教程链接: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"
答案 0 :(得分:10)
我认为你应该遵循这个:
编辑flaskr.py
文件中的配置或
导出FLASKR_SETTINGS
环境变量
指向配置文件。
从项目目录的根目录
安装应用程序pip install --editable .
指示烧瓶使用正确的应用程序
export FLASK_APP=flaskr
使用以下命令初始化数据库:
flask initdb
现在你可以运行flaskr:
flask run
注意正确安装--editable
。我没有看到"。"第一次。
答案 1 :(得分:4)
答案 2 :(得分:3)
遇到同样的问题,用
修复它python3 -m flask initdb
我必须使用python -m flask <command>
我猜测它与python3而不是python2有关,但我是python的新手,所以不太确定。
答案 3 :(得分:2)
就我而言,以下作品:
导出FLASK_APP = flaskr.flaskr
flask initdb
答案 4 :(得分:1)
我有同样的问题 - 对我有用的是在我当前的shell会话中重新运行下面的命令。
pip install --editable .
答案 5 :(得分:1)
我在尝试将示例命令添加到我的项目时也遇到了这个问题,但这是因为我的Flask命令与我的主应用程序不在同一个文件中 - 我试图将它放在自己的独立文件中。 / p>
当我将它放入我的主应用程序文件(在提问者的示例中为flaskr.py
)时,flask
会找到它。
然后我尝试使用Blueprints实现相同的目标(在单独的文件中执行命令),但不幸的是,蓝图中的命令是not supported yet。
答案 6 :(得分:1)
问题也可能是__init.py__
位于根文件夹中。鉴于__init.py__
位于flaskr / flaskr而不是根目录中,vuongbui的回答是正确的。
答案 7 :(得分:0)
如果仍然在运行,您需要停止当前的烧瓶会话。这就是我解决问题的方法。
答案 8 :(得分:0)
我通过查看此处的文档来解决: http://flask.pocoo.org/docs/1.0/tutorial/database/
click.command()
定义了一个名为“ init-db”的命令行命令
看到这之后,我运行了烧瓶init-db命令,得到了“初始化数据库”的返回信息。
答案 9 :(得分:0)
我也尝试了本教程,并遇到了这个问题。
我不确定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
。在根目录中创建新目录后,便可以导出THAT目录。
我的文件夹结构现在看起来像这样:
pythonflask (root)
|
app
__init__.py
现在,当我执行export FLASK_APP=app
时,我可以毫无问题地运行flask init-db
。
答案 10 :(得分:0)
在完全按照本教程进行操作后,我遇到了同样的问题。我已经跑过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
中运行.
的地方。
答案 11 :(得分:0)
我知道这已经很老了,但仅针对那些仍然像我昨天一样遇到此问题的人。
我的问题是__init__.py
我没有将本教程代码放在return app
之前:
from . import db
db.init_app(app)
答案 12 :(得分:0)
不需要我安装可编辑内容。只需将FLASK_APP
设置为保存__init__.py
文件的文件夹,这意味着将evironment变量设置为包含__init__.py
文件的文件夹。在我的情况下,flask文件夹包含包含__init__.py
文件的flaskr文件夹。所以,我只是做了以下
export FLASK_APP=flaskr
答案 13 :(得分:0)
如果您已经在运行服务器,请关闭服务器。 设置这些东西:
export FLASK_APP=flaskr
export FLASK_ENV=development
flask init-db
并确保在flaskr文件夹的父文件夹(即flask应用程序的父文件夹)中进行操作