Flask從入門到精通之模型定義
阿新 • • 發佈:2018-01-29
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從入門到精通之模型定義