Flask-SQLAlchemy 是一个Flask 扩展,简化了在Flask 程序中使用SQLAlchemy 的操作。SQLAlchemy 是一个很强大的关系型数据库框架,支持多种数据库后台。SQLAlchemy 提供了高层ORM,也提供了使用数据库原生SQL 的低层功能。
和其他大多数扩展一样,Flask-SQLAlchemy 也使用pip 安装:
pip install flask-sqlalchemy
在Flask-SQLAlchemy 中,数据库使用URL 指定。最流行的数据库引擎采用的数据库URL格式如下表:
MySQL | mysql://username:password@hostname/database |
Postgres | postgresql://username:password@hostname/database |
SQLite(Unix) | sqlite:////absolute/path/to/database |
SQLite(Windows) | sqlite:///c:/absolute/path/to/database |
在这些URL 中,hostname 表示MySQL 服务所在的主机,可以是本地主机(localhost),也可以是远程服务器。数据库服务器上可以托管多个数据库,因此database 表示要使用的数据库名。如果数据库需要进行认证,username 和password 表示数据库用户密令。
SQLite 数据库不需要使用服务器,因此不用指定hostname、username 和password。URL 中的database 是硬盘上文件的文件名。
程序使用的数据库URL 必须保存到Flask 配置对象的SQLALCHEMY_DATABASE_URI 键中。配置对象中还有一个很有用的选项,即SQLALCHEMY_COMMIT_ON_TEARDOWN 键,将其设为True时,每次请求结束后都会自动提交数据库中的变动。其他配置选项的作用请参阅Flask-SQLAlchemy 的文档。下面的例子展示了如何初始化及配置一个简单的MySQL 数据库
from flask import Flask from flask.ext.script import Manager from flask.ext.sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root@localhost:3306/test?charset=utf8mb4' app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True db = SQLAlchemy(app)
db 对象是SQLAlchemy 类的实例,表示程序使用的数据库,同时还获得了Flask-SQLAlchemy提供的所有功能。