2016-12-26 94 views
0

我在這裏找到燒瓶教程:http://flask.pocoo.org/docs/0.12/tutorial/。我已經按照步驟0-4的步驟操作,但無法理解步驟5(創建數據庫);我已閱讀並增加了培訓相關功能,以我的flaskr.py腳本,所以它目前看起來是這樣的:Python燒瓶:無法初始化SQLite數據庫

# all the imports 
import os 
import sqlite3 
from flask import Flask, request, session, g, redirect, url_for, abort, render_template, flash 

app = Flask(__name__) # create the application instance :) 
app.config.from_object(__name__) # load config from this file , flaskr.py 

# 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 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() 

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.') 

if __name__ == '__main__': 
    init_db() 
    app.run() 

本教程接着說,該數據庫可以通過調用初始化:

flask initdb 

運行此命令產量:

Usage: flask [OPTIONS] COMMAND [ARGS]... 

Error: No such command "initdb". 

從迄今爲止以下的教程中,我沒有在我的應用程序目錄中flask腳本。我還做了一些研究,發現這個資源:http://flask.pocoo.org/docs/0.12/cli/,其中指出這個燒瓶腳本帶有虛擬環境,但是我的虛擬環境沒有這個文件。我已通過導航到我的根目錄並使用以下方法進行驗證:

find . -name flask 
find . -name flask.py 

但是,這些命令都不會返回任何匹配。由於我對Flask比較新,所以我可能會在這裏錯過一些簡單的東西;有人可以解釋我缺少的東西並提供解決方法嗎?提前致謝!

+0

只是可以肯定,你可以在你的問題包括'畫中畫顯示Flask'輸出?在你的virtualenv(當然)中做。 – skytreader

+0

@skytreader:'pip show燒瓶'產量:'名稱:燒瓶 版本:0.12 摘要:基於Werkzeug,Jinja2和好心的微框架 主頁:http://github.com/pallets/flask/ 作者:Armin Ronacher 作者-email:[email protected]。com 許可證:BSD 位置:/home/neil/Desktop/flaskr/lib/python2.7/site-packages 需要:itsdangerous,click,Werkzeug,Jinja2' –

回答

1

純粹的教育猜測在這裏。但在你的代碼已經證明你具備以下條件:

@app.cli.command('initdb') 
def initdb_command(): 
    """Initializes the database.""" 
    init_db() 
    print('Initialized the database.') 

我認爲這應該是

@app.cli.command() 
def initdb(): 
    ... 

注意,沒有參數的裝飾和功能更名爲匹配您在命令行中調用的命令。

粗略瀏覽Flask並單擊文檔不會顯示您可以將字符串傳遞給裝飾器並將其作爲標記調用。

+0

我試過你的建議,但同樣的錯誤發生當使用'flask initdb'運行應用程序時:'用法:flask [OPTIONS] COMMAND [ARGS] ... 錯誤:沒有這樣的命令「initdb」。 '你有其他建議嗎? –

+0

更多猜測。保持我的答案中引入的更改,是否在運行'flask initdb'之前導出環境變量'FLASK_APP'和'FLASK_DEBUG'? [見這裏](http://flask.pocoo.org/docs/0.12/tutorial/packaging/#tutorial-packaging) – skytreader

0

試試這個:

python -m flask initdb

另一件事來檢查,如果你要通過教程:你__init__.py文件在正確的位置?它應該在第二級flaskr目錄中,而不是在頂層目錄中。

1

我在完成本教程時遇到了同樣的錯誤。我發現我已經打開了一個新的終端窗口來處理爲什麼服務器在另一臺服務器上運行。我固定通過再次運行導出命令的問題:

export FLASK_APP=flaskr 

然後:

flask initdb