Python 无法初始化烧瓶initdb(烧瓶教程步骤4)
教程链接: 我正在学习烧瓶教程。这是我的python脚本的当前设置。在本教程的最后,我将尝试初始化数据库。但出于某种原因,我不断地犯同样的错误Python 无法初始化烧瓶initdb(烧瓶教程步骤4),python,database,flask,Python,Database,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
# 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\u设置
环境变量
指向配置文件pip install --editable .
export FLASK_APP=flaskr
flask initdb
flask run
注意正确安装
--可编辑的。我第一次没有看到“.”。正确的表达式应该是:
export FLASK_APP=flaskr.py
注意:=
周围没有空格
以下屏幕截图显示您使用不同的envvar FLASK\u应用程序的输出:
如果flask的当前会话仍在运行,则需要停止该会话。这就是我解决问题的方法 就我而言,以下工作:
导出烧瓶\应用程序=烧瓶。烧瓶
flask initdb遇到了相同的问题,用
python3 -m flask initdb
我必须用python-m flask
我猜这与python3而不是python2有关,但我对python是新手,所以不能肯定。我也有同样的问题——对我有效的方法是在我当前的shell会话中重新运行下面的命令
pip install --editable .
我在尝试将示例命令添加到我的项目中时也遇到了这个问题,但这是因为我的Flask命令与我的主应用程序不在同一个文件中—我试图将它放在它自己的独立文件中
当我把它放到我的主应用程序文件中(在提问者的例子中是flaskr.py
),然后flask
找到它
然后,我尝试使用Blueprints中的命令实现相同的目的(命令位于单独的文件中),但不幸的是,Blueprints中的命令是。问题还可能是位于根文件夹中的\uuu init.py\uu
。Voungbui的答案是正确的,因为\uuu init.py\uuu
位于flaskr/flaskr中,而不是根。我通过查看此处的文档解决了这个问题:
定义名为“init db”的命令行命令
看到这一点后,我运行了flask init db命令it,得到了“Initialized the database”返回值。我也尝试过编写教程,但遇到了这个问题
我不确定Flask中是否有更改,但根据他们的说明,主Python文件名为\uuu init\uuuu.py
。为了成功运行initdb
,我必须执行export FLASK\u APP=\uuuuu init\uuuuuuuupy
。我的文件夹目录名为pythonflask
,但当我尝试执行export FLASK\u APP=pythonflask
(按照他们的指示,调用目录flaskr
,然后执行export FLASK\u APP=flaskr
),我遇到了这个问题。但是,执行export FLASK\u APP=\uuuuu init\uuuu.py
允许我运行FLASK init db
希望这有帮助
编辑:我玩过并意识到我试图使用我的root
文件夹作为FLASK\u应用程序
。一旦我在根目录中创建了一个新目录,我就能够导出该目录。
我的文件夹结构现在如下所示:
pythonflask (root)
|
app
__init__.py
现在,当我执行导出FLASK_APP=APP时,我能够毫无问题地运行FLASK init db。我也遇到了同样的问题,完全遵循教程。我已经运行了导出烧瓶\u APP=flaskr
。要运行flask init db
,请导航到flaskr
上方的目录(对于本教程,flask tutorial
)
当我运行tree
(并从教程中删除缓存和hello文件)时,我得到:
当我在
中运行flask init db
时,我知道这已经很旧了,但只适用于那些像我昨天一样仍然存在此问题的人
我的问题是\uuuu init\uuuuuuuuupy
我没有将本教程代码放在返回应用程序的前面:
from . import db
db.init_app(app)
它不需要我安装editable。只需将FLASK\u APP
设置为保存\uuuu init\uuuuuuuuuuuuuuuuuupy
文件的文件夹,这意味着将evironment变量设置为包含\uuuuuuuuuuuuuuuuuuuuuuupy
文件的文件夹。在我的例子中,flask文件夹保存flaskr文件夹,其中包含\uuuu init\uuuu.py
文件。所以,我只是做了以下几点
export FLASK_APP=flaskr
如果您已经在运行服务器,请关闭服务器。
设置以下内容:
export FLASK_APP=flaskr
export FLASK_ENV=development
flask init-db
并确保在flaskr文件夹的父文件夹中执行此操作,即您的flask应用程序的父文件夹您是否按照所述导出了flask应用程序?是的,我在这一步中执行了此操作:尝试使用export flask\u app=flaskr/flaskr.py
,然后使用flask initdb
@tymbark,这对我很有效,谢谢你提供的信息。set FLASK\u APP=flaskr
在窗口上也请注意,=
周围没有空格-这就是我做错的地方。
export FLASK_APP=flaskr
export FLASK_APP=flaskr
export FLASK_ENV=development
flask init-db