无法初始化flask initdb(Flask Tutorial Step4)

问题描述 投票:13回答:12

教程链接: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"
python database flask
12个回答
10
投票

我想你应该遵循这个:

  1. 编辑flaskr.py文件中的配置或导出指向配置文件的FLASKR_SETTINGS环境变量。
  2. 从项目目录的根目录安装应用程序 pip install --editable .
  3. 指示烧瓶使用正确的应用程序 export FLASK_APP=flaskr
  4. 使用以下命令初始化数据库: flask initdb
  5. 现在你可以运行flaskr: flask run

注意正确安装--editable。我没有看到“。”第一次。


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。一旦我在根目录中创建了一个新目录,我就能够导出该目录。我的文件夹结构现在看起来像这样:

pythonflask (root)
    |
     app
        __init__.py

现在当我做export FLASK_APP=app时,我能够毫无问题地运行flask init-db


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运行.的地方。


0
投票

我知道这已经过时了,但对于那些仍然像我昨天那样仍有这个问题的人来说。

我的问题是__init__.py我没有把这个教程代码放在return app之前:

from . import db
db.init_app(app)


4
投票

正确的表达应该是:

export FLASK_APP=flaskr.py

注意:=周围没有空格。

the outputs with different envvar FLASK_APP


3
投票

进入相同的问题,修复它

python3 -m flask initdb

我必须用python -m flask <command>为教程做一切

我猜它与python3而不是python2有关,但我是python的新手所以不太确定。


2
投票

在我的情况下,以下工作:

export FLASK_APP = flaskr.flaskr

flask initdb


1
投票

我有同样的问题 - 对我有用的是在我当前的shell会话中重新运行下面的命令。

pip install --editable .

1
投票

尝试将示例命令添加到我的项目时,我也遇到了这个问题,但这是因为我的Flask命令与我的主应用程序不在同一个文件中 - 我试图将它放在自己的独立文件中。

当我把它放入我的主应用程序文件(在提问者的例子中将是flaskr.py)时,flask找到它。

然后我尝试使用Blueprints实现相同的结束(在单独的文件中的命令)但不幸的是蓝图中的命令是not supported yet


1
投票

问题也可能是位于根文件夹中的__init.py__。鉴于__init.py__位于flaskr / flaskr而非根部,vuongbui的答案是正确的。


0
投票

如果仍在运行,您需要停止当前的烧瓶会话。这就是我解决问题的方法。


0
投票

我通过查看这里的文档解决了:http://flask.pocoo.org/docs/1.0/tutorial/database/

click.command() 

定义一个名为“init-db”的命令行命令

在我看到这个后,我运行了flask init-db命令,我得到了“Initialized the database”返回。

© www.soinside.com 2019 - 2024. All rights reserved.