1. 程式人生 > >Flask從入門到精通之模型定義

Flask從入門到精通之模型定義

rul lena 系列 pic ret blog integer mod type

  模型這個術語表示程序使用的持久化實體。在ORM 中,模型一般是一個Python 類,類中的屬性對應數據庫表中的列。

  Flask-SQLAlchemy 創建的數據庫實例為模型提供了一個基類以及一系列輔助類和輔助函數,可用於定義模型的結構。下面的實例中分別定義rules和users的模型:

class Role(db.Model):
    __tablename__ = roles
    id = db.column(db.Integer,primary_key = True)
    name = db.Column(db.String(64),unique=True)
    def __repr__(self):
        
return <Role %r> % self.name class User(db.Model): __tablename__ = users id = db.column(db.Integer,primary_key = True) name = db.Column(db.String(64),unique=True) def __repr__(self): return <User %r> % self.name

  類變量__tablename__ 定義在數據庫中使用的表名。如果沒有定義__tablename__,Flask-SQLAlchemy 會使用一個默認名字,但默認的表名沒有遵守使用復數形式進行命名的約定,所以最好由我們自己來指定表名。其余的類變量都是該模型的屬性,被定義為db.Column類的實例。

  db.Column 類構造函數的第一個參數是數據庫列和模型屬性的類型。下表列出了一些可用的列類型以及在模型中使用的Python 類型。

類型名 Python類型 說明
Integer int 普通整數,一般是32 位
SmallInteger int 取值範圍小的整數,一般是16 位
BigInteger int或則long 不限制精度的整數
Float float 浮點數
Numeric decimal.Decimal 定點數
String   str 變長字符串
Text str 變長字符串,對較長或不限長度的字符串做了優化
Unicode unicode 變長Unicode 字符串
UnicodeText unicode 變長Unicode 字符串,對較長或不限長度的字符串做了優化
Boolean bool 布爾值
Date datetime.date 日期
Time datetime.time 時間
DateTime datetime.datetime 日期和時間
Interval datetime.timedelta 時間間隔
Enum str 一組字符串
PickleType 任何Pyhton對象 自動使用Pickle 序列化
LargeBinary str 二進制文件

  db.Column 中其余的參數指定屬性的配置選項。下表 列出了一些可用選項。

選項名 說明
primary_key 如果設為True,這列就是表的主鍵
unique 如果設為True,這列不允許出現重復的值
index 如果設為True,為這列創建索引,提升查詢效率
nullable 如果設為True,這列允許使用空值;如果設為False,這列不允許使用空值
default 為這列定義默認值

  Flask-SQLAlchemy 要求每個模型都要定義主鍵,這一列經常命名為id。

  雖然沒有強制要求,但這兩個模型都定義了__repr()__ 方法,返回一個具有可讀性的字符串表示模型,可在調試和測試時使用

Flask從入門到精通之模型定義