天天看點

用 Flask 來寫個輕部落格 (4) — (M)VC_建立資料模型和表目錄前文清單擴充閱讀定義資料模型 models建立表

<a href="#%E7%9B%AE%E5%BD%95">目錄</a>

<a href="#%E5%89%8D%E6%96%87%E5%88%97%E8%A1%A8">前文清單</a>

<a href="#%E6%89%A9%E5%B1%95%E9%98%85%E8%AF%BB">擴充閱讀</a>

<a href="#%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E6%A8%A1%E5%9E%8B-models">定義資料模型 models</a>

<a href="#%E5%88%9B%E5%BB%BA%E8%A1%A8">建立表</a>

<a href="http://blog.csdn.net/jmilk/article/details/53150084">用 Flask 來寫個輕部落格 (1) — 建立項目</a>

<a href="http://blog.csdn.net/jmilk/article/details/53152158">用 Flask 來寫個輕部落格 (2) — Hello World!</a>

<a href="http://blog.csdn.net/jmilk/article/details/53153382">用 Flask 來寫個輕部落格 (3) — (M)VC_連接配接 MySQL 和 SQLAlchemy</a>

<a href="http://stackoverflow.com/questions/1436703/difference-between-str-and-repr-in-python">Difference between __str__ and __repr__ in Python</a>

SQLAlchemy 允許我們根據資料庫的表結構來建立資料模型, 反之亦可. 是以我們一般無須手動的登入到資料庫中使用 SQL 語句來建立表, 我們隻需把資料模型定義好了之後, 表結構也就有了.

首先要初始化 SQLAlchemy, 在 models.py 中把 app 對象 傳入 SQLAlchemy :

vim JmilkFan-s-Blog/models.py

db 是 class SQLAlchemy 的執行個體化對象, 包含了 SQLAlchemy 對資料庫操作的支援類集.

接下來, 我們就可以在 models.py 中定義 models 類了:

這樣我們就得到了一個 User models, 該模型是基于 users 表的. 該資料表擁有 3 個字段 id/username/password 對應這由 class db.Column 執行個體化出來的 3 個對象, 當 class User 繼承自 db.Model 時, SQLAlchemy 與 資料庫的連接配接通過就已經自動的 Ready 了.

db.Column: 其構造器的第一個參數是可選的, 如果傳入實參時, 表示建立的字段名. 反之, 則預設使用該執行個體化對象的名字(即 User 的類屬性名); 第二個參數指定了字段的資料類型.

__init__(): 其實我們可以省略定義 class User 的構造器. 這樣的話 SQLAlchemy 會自動幫我們建立構造器, 并且所有定義的字段名将會成為此構造器的關鍵字參數名. EXAMPLE:

__repr__(): 該方法傳回一個對象的 字元串表達式. 與 __str__() 不同, 前者傳回的是字元串表達式, 能被 eval() 處理;後者傳回的是字元串, 不能被 eval() 處理得到原來的對象, 但與 print 語句結合使用時, 會被預設調用. 與 repr() 類似, 将對象轉化為便于供 Python 解釋器讀取的形式, 傳回一個可以用來表示對象的可列印字元串.

在建立表之間需要先建立資料庫

指定資料庫 myblog 的字元集為 utf8.

然後, 我們仍然可以通過 manage.py 來添加建立資料庫表的指令:

NOTE: 從現在開始我們每在 models.py 中新定義一個資料模型, 都需要在 manager.py 中導入并添加到傳回 dict 中.

這樣我們就可以通過 manager 的 shell 指令行來進行資料庫表的建立了:

注意: 如果在進入 manager shell 時觸發 ERROR 沒有 flask.ext 這個子產品的話, 應該檢查 virtualenv 的環境是否正确, 是否有安裝所需要的依賴包, 如果沒有則執行:

最後, 登入資料庫驗證資料表表是否由正确建立

以同樣的方法我們可以建立所和需要的所有資料庫表.