2016-11-19 99 views
9

教程鏈接:http://flask.pocoo.org/docs/0.11/tutorial/dbinit/#tutorial-dbinit無法初始化燒瓶initdb的(瓶教程步驟4)

我下面的教程瓶。這是我的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" 
+2

您是否按照[此處](http://flask.pocoo.org/docs/0.11/cli/#basic-usage)所述導出了燒瓶應用程序? –

+0

是的,我在這一步做了:http://flask.pocoo.org/docs/0.11/tutorial/setup/#tutorial-setup – YAL

+6

嘗試使用'export FLASK_APP = flaskr/flaskr.py'然後'flask initdb ' – tymbark

回答

8

我認爲你應該遵循這樣的:

  1. 編輯配置在flaskr.py文件或 導出指向配置文件的FLASKR_SETTINGS環境變量 。

  2. 從項目的根目錄下安裝應用程序

    pip install --editable . 
    
  3. 指示瓶的使用權申請

    export FLASK_APP=flaskr 
    
  4. 用這個命令初始化數據庫:

    flask initdb 
    
  5. 現在你可以r聯合國flaskr:

    flask run 
    

注重正確安裝--editable。我沒有看到「。」第一次。

0

你需要停止燒瓶當前會話,如果它仍在運行。這就是我解決問題的方法。

0

在我的情況,以下工作:

出口FLASK_APP = flaskr.flaskr

燒瓶initdb的

1

遇到同樣的問題,與

python3 -m flask initdb 

我不得不固定它本教程做的一切與python -m flask <command>

我猜它是用python3而不是python2做的,但是我對python很陌生,所以不太確定。

0

我有這個相同的問題 - 對我而言,在我當前的shell會話中重新運行下面的命令。

pip install --editable . 
0

我也有嘗試的例子命令添加到我的項目的時候這個問題,但是那是因爲我的瓶命令在同一個文件作爲我的主要應用是不是 - 我試圖把它放在自己的獨立文件。

當我把它放到我的主應用程序文件(在提問者的例子中是flaskr.py),然後flask發現它。

然後我嘗試使用Blueprints來達到同樣的目的(在一個單獨的文件中的命令),但不幸的是藍圖中的命令是not supported yet

0

這個問題也可能是__init.py__位於根文件夾中。 vuongbui的回答是正確的,因爲__init.py__位於燒瓶/燒瓶而不是根。