5.6 定义模型
模型這個術語表示應用使用的持久化實體。在 ORM 中,模型一般是一個 Python 類,類中的屬性對應于數據庫表中的列。
Flask-SQLAlchemy 創建的數據庫實例為模型提供了一個基類以及一系列輔助類和輔助函數,可用于定義模型的結構。圖 5-1 中的 roles 表和 users 表可像示例 5-2 那樣,定義為 Role 和 User 模型。
示例 5-2 hello.py:定義 Role 和 User 模型
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.nameclass User(db.Model):__tablename__ = 'users'id = db.Column(db.Integer, primary_key=True)username = db.Column(db.String(64), unique=True, index=True)def __repr__(self):return '<User %r>' % self.username類變量 __tablename__ 定義在數據庫中使用的表名。如果沒有定義 __tablename__,Flask-SQLAlchemy 會使用一個默認名稱,但默認的表名沒有遵守流行的使用復數命名的約定, 所以最好由我們自己來指定表名。其余的類變量都是該模型的屬性,定義為 db.Column 類 的實例。
db.Column 類構造函數的第一個參數是數據庫列和模型屬性的類型。表 5-2 列出了一些可用的列類型以及在模型中使用的 Python 類型。
表5-2:最常用的SQLAlchemy列類型
| 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 | 任何 Python 對象 | 自動使用 Pickle 序列化 |
| LargeBinary | str | 二進制 blob |
db.Column 的其余參數指定屬性的配置選項。表 5-3 列出了一些可用選項。
表5-3:最常用的SQLAlchemy列選項
| primary_key | 如果設為 True,列為表的主鍵 |
| unique | 如果設為 True,列不允許出現重復的值 |
| index | 如果設為 True,為列創建索引,提升查詢效率 |
| nullable | 如果設為 True,列允許使用空值;如果設為 False,列不允許使用空值 |
| default | 為列定義默認值 |
Flask-SQLAlchemy 要求每個模型都定義主鍵,這一列經常命名為 id。
雖然沒有強制要求,但這兩個模型都定義了 __repr()__ 方法,返回一個具有可讀性的字符串表示模型,供調試和測試時使用。
《基于Python的Web應用開發實戰(第二版)》
轉載于:https://www.cnblogs.com/hl001/p/10234450.html
總結
- 上一篇: 抖音很火的存钱计划,让python告诉你
- 下一篇: 原型、原型对象、构造函数、原型链理解