Flask从入门到精通之模型定义

  模型这个术语表示程序使用的持久化实体。在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类型说明
Integerint普通整数,一般是32 位
SmallIntegerint取值范围小的整数,一般是16 位
BigIntegerint或则long不限制精度的整数
Floatfloat浮点数
Numericdecimal.Decimal定点数
String  str变长字符串
Textstr变长字符串,对较长或不限长度的字符串做了优化
Unicodeunicode变长Unicode 字符串
UnicodeTextunicode变长Unicode 字符串,对较长或不限长度的字符串做了优化
Booleanbool布尔值
Datedatetime.date日期
Timedatetime.time时间
DateTimedatetime.datetime日期和时间
Intervaldatetime.timedelta时间间隔
Enumstr一组字符串
PickleType任何Pyhton对象自动使用Pickle 序列化
LargeBinarystr二进制文件

  db.Column 中其余的参数指定属性的配置选项。下表 列出了一些可用选项。

选项名说明
primary_key如果设为True,这列就是表的主键
unique如果设为True,这列不允许出现重复的值
index如果设为True,为这列创建索引,提升查询效率
nullable如果设为True,这列允许使用空值;如果设为False,这列不允许使用空值
default为这列定义默认值

  Flask-SQLAlchemy 要求每个模型都要定义主键,这一列经常命名为id。

  虽然没有强制要求,但这两个模型都定义了__repr()__ 方法,返回一个具有可读性的字符串表示模型,可在调试和测试时使用

转载于:https://www.cnblogs.com/senlinyang/p/8378632.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值