范例:基于Flask SQLAlchemy的应用
查看以下链接,以阅览一个完整的Flask应用范例。
该范例与Lite范例的运行效果完全相同。换言之,它的API和功能都与Lite范例完全相同。只有以下区别:
- 默认的数据库后端是Flask SQLAlchemy。
- 在代码实现中,更倾向于使用Flask SQLAlchemy提供的旧式的数据库API。
数据库结构
数据库的实体关系图(entity-relationship diagram, ERD)还是与Lite范例一样:
与Lite范例相比,该范例的数据库具有以下不同的特性:
-
默认的数据库后端是Flask SQLAlchemy。如果常规版未安装,则退回到Flask SQLAlchemy Lite。
-
针对每个对象关系映射(ORM)模型,受益于Flask SQLAlchemy的增强,不必手动定义
__tablename__
。 -
以下API
db.session.execute(sa.select(...))
db.session.query(...)
会替换成形如
Model.query
的旧式API。这些用法都是Flask SQLAlchemy提供的。 -
基于ID的实体定位是透过
db.get_or_404(...)
、而非db.session.get(...)
实现的。该get_or_404(...)
方法来自Flask SQLAlchemy。在数据项未找到时,该方法不会返回None
,而是会抛出一个404中断。
访问范例
可以使用与Lite范例中相同的测试脚本,因为该范例实现的API和Lite范例的API完全一致。