大多数数据库引擎都有对应的 Python 包,包括开源包和商业包。Flask 并不限制你使用 何种类型的数据库包,因此你可以根据自己的喜好选择使用 MySQL、Postgres、SQLite、 Redis、MongoDB、CouchDB 或 DynamoDB。
如果这些都无法满足需求,还有一些数据库抽象层代码包供选择,例如 SQLAlchemy 和 MongoEngine。你可以使用这些抽象包直接处理高等级的 Python 对象,而不用处理如表、 文档或查询语言之类的数据库实体。
选择数据库框架时,要考虑很多因素。
易用性
如果直接比较数据库引擎和数据库抽象层,显然后者取胜。抽象层,也称为对象关系映 射器(ORM)或对象文档映射器(ODM),在用户不知不觉的情况下把高层的面向对 象操作转换成低层的数据库指令。
性能
ORM 和 ODM 把对象业务转换成数据库业务时会有一定的损耗。多数情况下,这种性 能的降低微不足道,但也不一定都是如此。一般情况下,ORM 和 ODM 对生产率的提 升远远超过了这一丁点儿的性能降低,所以性能降低这个理由不足以说服用户完全放弃 ORM 和 ODM。真正的关键点在于选择一个能直接操作低层数据库的抽象层,以防特 定的操作需要直接使用数据库原生指令优化。
可移植性
选择数据库时,必须考虑其是否能在你的开发平台和生产平台中使用。例如,如果你打算利用云平台托管应用,就要知道这个云服务提供了哪些数据库可供选择。
可移植性还针对 ORM 和 ODM。尽管有些框架只为一种数据库引擎提供抽象层,但其 他框架可能做了更高层的抽象,支持不同的数据库引擎,而且都使用相同的面向对象接 口。SQLAlchemy ORM 就是一个很好的例子,它支持很多关系型数据库引擎,包括流 行的 MySQL、Postgres 和 SQLite。
FLask 集成度
选择数据库框架时,不一定非得选择已经集成了 Flask 的框架,但选择这样的框架可以节省编写集成代码的时间。使用集成了 Flask 的框架可以简化配置和操作,所以专门为 Flask 开发的扩展是你的首选。
基于以上因素,本书选择使用的数据库框架是 Flask-SQLAlchemy,这个 Flask 扩展包装 了 SQLAlchemy 框架。
《基于Python的Web应用开发实战(第二版)》