2014-10-08 99 views
0

app.py的代碼示例:爲什麼Flask-SQLAlchemy代碼塊執行兩次?

# imports here 

app = Flask(__name__) 
app.config.from_pyfile('app.cfg') 
db.init_app(app) 
with app.app_context(): 
    if os.path.exists('database/example.db'): 
     print 'already exists' 
    else: 
     print 'database created' 
     db.create_all() 


#routes here 

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

在初始負載,將打印「創建的數據庫」,然後「已經存在」。如果我在創建數據庫時再次加載它,「已存在」會打印兩次。

already exists 
* Running on http://127.0.0.1:5000/ 
* Restarting with reloader 
already exists 

兩個部分的問題:

1)爲什麼與app.app_context()塊中執行兩次?

2)什麼是更好的方式來寫這個代碼?

+1

正如輸出所示,它是自動代碼重新載入器,可以重新啓動您的代碼。它應該在應用程序運行時代碼發生更改時執行此操作,它只能在調試模式下啓用(也許應顯示'app.cfg')。但是,在數據庫已經存在的情況下,我真的不知道有什麼變化,所以沒有線索。 – burnpanck 2014-10-08 06:25:34

回答

2

瞭解會發生什麼回到python基礎知識。當你輸入python your_module.py python解釋器會逐行讀取(解釋)你的代碼。在這種情況下,它會在您到達時執行您的with app.app_context代碼,您將看到輸出數據庫創建第一次或已存在下次。接下來發生什麼?解釋器將繼續到您的if __name__ == '__main__':行,然後由於您直接運行它將調用app.run方法,並且默認debug參數是True,它將以調試模式啓動開發服務器,並且自動重新加載器將重新啓動您的代碼(如上所述@burnpanck)。

相關問題