使用flask开发RESTful架构的api服务器端(4)–flask操作数据库

512 查看

前面几个章节介绍了怎样搭建flask服务器,介绍了flask中如何实现HTTP的4种操作方法,但是前一章中是使用内存来保存数据,这样数据实际没有保存下来,而且也只能在单进程中使用,实际使用中我们需要数据库来为我们完成数据的相关操作,这一章将介绍如何在flask中使用数据库,以mysql为例;

flask有一个对数据库的扩展flask-sqlalchemy,它简化了在flask中对sqlalchemy的操作,sqlalchemy是一个强大的关系数据库框架,支持一些数据库后端,提供高级的ORM和底层访问数据库的本地sql功能;

使用pip来安装flask-sqlalchemy

在flask-sqlalchemy中,sql被指定为URL,访问mysql的url如下:

在URL中hostname是指托管mysql服务的服务器,可以使localhost也可以是远端服务器,数据库服务器可以托管多个数据库,所以database要指定连接的数据库名,username和password是数据库的身份验证;

应用程序数据库URL必须在flask配置对象中的SQLALCHEMY_DATABASE_URI中进行配置,另一个有用的选项是SQLALCHEMY_COMMIT_ON_TEARDOWN,可以设置为True来启动自动提交数据库更改在每个请求中:

由SQLAlchemy实例化的db对象表示数据库且提供访问flask-sqlalchemy的所有功能;

flask_sqlalchemy使用模型来定义数据库表,一个模型通常是一个带有属性的python类,其属性与数据库表的列相匹配对应,flask-sqlalchemy数据库实例提供了一个基类以及一组辅助类和函数用于定义它的结构,如下定义了一个student模型:

__tablename__类变量定义数据库中表的名称,如果缺省,flask_sqlalchemy会指定默认表名,其余的变量是模型的属性,定义为db.Column类的实例;

传给db.Column构造函数的第一个参数是数据库列的类型也就是模型属性的数据类型:

类型名称 python类型 描述
Integer int 常规整型,通常为32位
SmallInteger int 短整型,通常为16位
BigInteger int或long 精度不受限整型
Float float 浮点型
Numeric decimal 定点数
String str 可变长度字符串
Text str 可变长度字符串,适合大量文本
Unicode unicode 可变长度Unicode字符串
Boolean bool 布尔值
Date datetime.date 日期类型
Time datetime.time 时间类型
Daetime datetime.datetime 日期时间类型
Interval datetime.timedate 时间间隔
Enum str 字符列表
PickleType 任意Python对象 自动Pickle序列化
LargeBinary str 二进制

其它的参数为每个属性指定了配置选项:

可选参数 描述
primary_key 设置为True,该列为表的主键
unique 设置为True,该列不允许相同的值
index 设置为True,为该列创建索引
nullable 设置为True,允许为空
default 定义该列的默认值

一个简单的例子,使用POST插入学生信息,使用GET来获取信息:

使用post上传信息后,数据或同步保存到数据库中,程序重启后依然能够从数据库中获取历史信息;