一、安装
$ pip install flask-sqlalchemy
二、配置
配置选项列表 :
SQLALCHEMY_NATIVE_UNICODE | 可以用于显式禁用原生 unicode 支持。当使用 不合适的指定无编码的数据库默认值时,这对于 一些数据库适配器是必须的(比如 Ubuntu 上某些版本的 PostgreSQL )。|
| SQLALCHEMY_POOL_SIZE | 数据库连接池的大小。默认是引擎默认值(通常 是 5 ) |
| SQLALCHEMY_POOL_TIMEOUT | 设定连接池的连接超时时间。默认是 10 。 |
| SQLALCHEMY_POOL_RECYCLE | 多少秒后自动回收连接。这对 MySQL 是必要的, 它默认移除闲置多于 8 小时的连接。注意如果 使用了 MySQL , Flask-SQLALchemy 自动设定这个值为 2 小时。|
app.config["SQLALCHEMY_DATABASE_URI"] = DATABASE_URI
app.config["SQLALCHEMY_COMMIT_ON_TEARDOWN"] = True/False # 每次请求结束后都会自动提交数据库中的变动.
app.config[""] =
app.config[""] =
app.config[""] =
app.config[""] =
DATABASE_URI :
mysql : mysql://username:password@hostname/database
pgsql : postgresql://username:password@hostname/database
sqlite(linux) : sqlite:absolute/path/to/database
sqlite(windows) : sqlite:///c:/absolute/path/to/database
三、初始化示例
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
base_dir = os.path.abspath(os.path.dirname(__file__))
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = 'sqlite:///' + os.path.join(base_dir, 'data.sqlite')
app.config["SQLALCHEMY_COMMIT_ON_TEARDOWN"] = True
db = SQLAlchemy(app)
四、定义模型
模型 表示程序使用的持久化实体. 在 ORM 中, 模型一般是一个 Python 类, 类中的属性对应数据库中的表.
Flaks-SQLAlchemy 创建的数据库实例为模型提供了一个基类以及一些列辅助类和辅助函数, 可用于定义模型的结构.
db.Model # 创建模型,
db.Column # 创建模型属性.
模型属性类型 :
常用 SQLAlchemy 列选项
示例 :
class Role(db.Model):
__tablename__ = "roles"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), unique=True)
def __repr__(self):
"""非必须, 用于在调试或测试时, 返回一个具有可读性的字符串表示模型."""
return '' % self.name
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True, index=True)
def __repr__(self):
"""非必须, 用于在调试或测试时, 返回一个具有可读性的字符串表示模型."""
return '' % self.username
五、关系
关系型数据库使用关系把不同表中的行联系起来。
常用 SQLAlchemy 关系选项:
(1)一对多
原理 : 在 “多” 这一侧加入一个外键, 指定 “一” 这一侧联结的记录.
示例代码 : 一个角色可属于多个用户, 而每个用户只能有一个角色.
class Role(db.Model):
# ...
users = db.relationship('User', backref='role')
class User(db.Model):
# ...
role_id = db.Column(db.Integer, db.Foreign