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

时间:2016-11-19 18:59:17

标签: python database flask

教程链接: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"

14 个答案:

答案 0 :(得分:10)

我认为你应该遵循这个:

  1. 编辑flaskr.py文件中的配置或  导出FLASKR_SETTINGS环境变量  指向配置文件。

  2. 从项目目录的根目录

    安装应用程序
    pip install --editable .
    
  3. 指示烧瓶使用正确的应用程序

    export FLASK_APP=flaskr
    
  4. 使用以下命令初始化数据库:

    flask initdb
    
  5. 现在你可以运行flaskr:

    flask run
    
  6. 注意正确安装--editable。我没有看到"。"第一次。

答案 1 :(得分:4)

正确的表达应该是:

export FLASK_APP=flaskr.py

注意:=周围没有空格。

the outputs with different envvar FLASK_APP

答案 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应用程序的父文件夹)中进行操作