Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法初始化烧瓶initdb(烧瓶教程步骤4)_Python_Database_Flask - Fatal编程技术网

Python 无法初始化烧瓶initdb(烧瓶教程步骤4)

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

教程链接:

我正在学习烧瓶教程。这是我的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\u设置
    环境变量 指向配置文件

  • 从项目目录的根目录安装应用程序

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

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

    flask initdb
    
  • 现在您可以运行flaskr:

    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