2014-01-20 78 views
8

我對標題中提到的話題有些困惑。Flask-SQLAlchemy - 何時創建和銷燬表/數據庫?

因此,當啓動Flask應用程序時,SQLAlchemy是否在SQLALCHEMY_DATABASE_URI中搜索正確的(在本例中爲MySQL數據庫)。那麼,如果它們不存在,它會創建表嗎?

如果編入config.py文件中SQLALCHEMY_DATABASE_URI變量的數據庫不存在,該怎麼辦?

如果該數據庫存在,並且只有少數表存在(SQLAlchemy代碼中存在的表比實際MySQL數據庫中存在更多)?它是否擦除這些表格,然後用當前的規格創建新表格?

那麼如果這些表都存在?它們是否被擦除並重新創建? (1)在對模式進行更改時不要丟失數據庫信息,(2)可以編寫必要的代碼以完全管理如何以及何時SQLAlchemy與實際的數據庫交談。

回答

10

表格不會自動創建;你需要調用SQLAlchemy.create_all() method明確地把它爲你創建表:

db = SQLAlchemy(app) 
db.create_all() 

您可以使用命令行實用程序做到這一點,例如。或者,如果您部署到PaaS,例如Google App Engine,這是一個專用管理員專用視圖。

這同樣適用於數據庫表破壞;使用SQLAlchemy.drop_all() method

查看Creating and Dropping tables chapter of the documentation,或查看database chapter of the Mega Flask Tutorial

+0

我對這些方法很熟悉,但我不允許從應用程序本身調用它們嗎?就像在應用程序啓動時一樣,它可以檢查數據庫是否存在,如果不存在,請調用create_all方法?在Mega教程中,他使用SQLite,這意味着他可以檢查文件以查看他的數據庫是否在那裏。這可能與MySQL? –

+0

@AlexChumbley:你當然可以做到這一點;檢測是否沒有列出表並自動調用'create_all'。 –

+0

@AlexChumbley:我現在正在開發GAE應用程序,通過'/ admin'路線讓您調用'create_tables'部分,並着眼於未來的遷移支持。 –