### 導航
- [索引](# "總目錄")
- [下一頁](# "步驟 4: 請求數據庫連接") |
- [上一頁](# "步驟 2: 應用設置代碼") |
- [Flask 0.10.1 文檔](#) ?
- [教程](#) ?
# 步驟 3: 創建數據庫
Flaskr 是一個數據庫驅動的應用,如同之前所概括的,更準確的說法是,一個由關系數據庫系統驅動的應用。關系數據庫系統需要一個模式來決定存儲信息的方式。所以在第一次開啟服務器之前,要點是創建模式。
可以通過管道把 schema.sql 作為 sqlite3 命令的輸入來創建這個模式,命令如下:
~~~
sqlite3 /tmp/flaskr.db < schema.sql
~~~
這種方法的缺點是需要安裝 sqlite3 命令,而并不是每個系統都有安裝。而且你必須提供數據庫的路徑,否則將報錯。添加一個函數來對初始化數據庫是個不錯的想法。
如果你想這么做,你首先要從 contextlib 包中導入 [contextlib.closing()](http://docs.python.org/dev/library/contextlib.html#contextlib.closing "(在 Python v3.5)") [http://docs.python.org/dev/library/contextlib.html#contextlib.closing]函數。如果你想使用 Python 2.5 ,那么必須先啟用 with 聲明( __future__導入必須先于其它的導入):
~~~
from __future__ import with_statement
from contextlib import closing
~~~
接下來,我們可以創建一個名為 init_db 的函數來初始化數據庫。為此,我們可以使用之前定義的 connect_db 函數。只需要在 connect_db 函數后面添加這個函數:
~~~
def init_db():
with closing(connect_db()) as db:
with app.open_resource('schema.sql') as f:
db.cursor().executescript(f.read())
db.commit()
~~~
[closing()](http://docs.python.org/dev/library/contextlib.html#contextlib.closing "(在 Python v3.5)") [http://docs.python.org/dev/library/contextlib.html#contextlib.closing] 助手函數允許我們在 with 塊中保持數據庫連接可用。應用對象的 [open_resource()](# "flask.Flask.open_resource") 方法在其方框外也支持這個功能,因此可以在 with 塊中直接使用。這個函數從資源位置(你的 flaskr 文件夾)中打開一個文件,并且允許你讀取它。我們在這里用它在數據庫連接上執行一個腳本。
當我們連接到數據庫時會得到一個數據庫連接對象(這里命名它為 db ),這個對象提供給我們一個數據庫指針。指針上有一個可以執行完整腳本的方法。最后我們不顯式地提交更改, SQLite 3 或者其它事務數據庫不會這么做。
現在可以在 Python shell 里創建數據庫,導入并調用剛才的函數:
~~~
>>> from flaskr import init_db
>>> init_db()
~~~
故障排除
如果你獲得了一個表無法找到的異常,請檢查你確實調用了 init_db 函數并且表的名稱是正確的(如單數復數混淆)。
繼續 [*步驟 4: 請求數據庫連接*](#)
? 版權所有 2013, Armin Ronacher.
- 歡迎使用 Flask
- 前言
- 給有經驗程序員的前言
- 安裝
- 快速入門
- 教程
- 介紹 Flaskr
- 步驟 0: 創建文件夾
- 步驟 1: 數據庫模式
- 步驟 2: 應用設置代碼
- 步驟 3: 創建數據庫
- 步驟 4: 請求數據庫連接
- 步驟 5: 視圖函數
- 步驟 6: 模板
- 步驟 7: 添加樣式
- 福利: 應用測試
- 模板
- 測試 Flask 應用
- 記錄應用錯誤
- 配置處理
- 信號
- 即插視圖
- 應用上下文
- 請求上下文
- 用藍圖實現模塊化的應用
- Flask 擴展
- 與 Shell 共舞
- Flask 代碼模式
- 大型應用
- 應用程序的工廠函數
- 應用調度
- 使用 URL 處理器
- 部署和分發
- 使用 Fabric 部署
- 在 Flask 中使用 SQLite 3
- 在 Flask 中使用 SQLAlchemy
- 上傳文件
- 緩存
- 視圖裝飾器
- 使用 WTForms 進行表單驗證
- 模板繼承
- 消息閃現
- 用 jQuery 實現 Ajax
- 自定義錯誤頁面
- 延遲加載視圖
- 在 Flask 中使用 MongoKit
- 添加 Favicon
- 數據流
- 延遲請求回調
- 添加 HTTP Method Overrides
- 請求內容校驗碼
- 基于 Celery 的后臺任務
- 部署選擇
- mod_wsgi (Apache)
- 獨立 WSGI 容器
- uWSGI
- FastCGI
- CGI
- 聚沙成塔
- API
- JSON 支持
- Flask 中的設計決策
- HTML/XHTML 常見問題
- 安全注意事項
- Flask 中的 Unicode
- Flask 擴展開發
- Pocoo 風格指引
- Python 3 支持
- 升級到最新版本
- Flask Changelog
- 許可證
- 術語表