9.3.1 定义模型
定义模型
模型这个术语表示程序使用的持久化实体。在 ORM 中,模型一般是一个 Python 类,类中 的属性对应数据库表中的列。
Flask-SQLAlchemy 创建的数据库实例为模型提供了一个基类以及一系列辅助类和辅助函 数,可用于定义模型的结构
会员模型
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(100),unique=True)
pwd= db.Column(db.String(100))
email= db.Column(db.String(100))
phone= db.Column(db.String(11))
info= db.Column(db.Text)
# 要引入datetime
addtime = db.Column(db.DateTime,default=datetime.datetime.now)
def __repr__(self):
return '<User %r>' % self.username
类变量 tablename 定义在数据库中使用的表名。
如果没有定义 tablename, SQLAlchemy 会使用一个默认名字,但默认的表名没有遵守使用复数形式进行命名的约定, 所以最好由我们自己来指定表名。
其余的类变量都是该模型的属性,被定义为 db.Column 类的实例。
db.Column 类构造函数的第一个参数是数据库列和模型属性的类型。
最常用的SQLAlchemy列类型:
类型名 | 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 | 任何 Python 对象 | 自动使用 Pickle 序列化 |
LargeBinary | str | 二进制文件 |
最常使用的SQLAlchemy列选项
db.Column 中其余的参数指定属性的配置选项 | 选项名 | 说 明 | | :------- | :---: | |primary_key |如果设为True,这列就是表的主键| |unique |如果设为 True,这列不允许出现重复的值| |index |如果设为 True,为这列创建索引,提升查询效率| |nullable |如果设为 True,这列允许使用空值;如果设为 False,这列不允许使用空值| |default |为这列定义默认值|
Flask-SQLAlchemy 要求每个模型都要定义主键,这一列经常命名为 id。