在 flask 中, 很多人喜欢通过 SQLAlchemy 来操作数据库。这种情况下推荐使用包代替模块, 把数据模型剥离到一个独立的模块中。这样的做法不是必须的, 但是更加合理。
Flask-SQLAlchemy Extension
SQLAlchemy 是一个通用的数据库抽象层和 ORM, 它需要一些额外的配置, Flask 中有一个扩展来处理这些。
Declarative
SQLAchemy 中的 declarative extension 是最近出现的一种方法。这种方法允许你一次性定义表单和数据模型, 这和 Django 的工作方式类似。
下面是一个database.py模块的例子:
我们自己定义的数据模型只需要继承上面代码中的Base就可以了。这个地方不用担心线程安全的问题,因为 SQLAlchemy 已经通过scoped_session帮我们处理了。
我们只需要把下面的代码放入我们的应用模块中就可以以 declarative 的方式来使用 SQLAlchemy 了。Flask 会在 request 结束或者应用退出时自动关闭 session:
下面的代码是一个数据模型的例子(可以放入 models.py中, e.g.):
创建数据库的时候可以使用init_db():
向数据库中插入记录:
查询也很简单:
注: 本文翻译自官方文档 http://flask.pocoo.org/docs/0.12/patterns/sqlalchemy/
领取专属 10元无门槛券
私享最新 技术干货