一、ORM
ORM:Object Relational Mapping,对象关系映射,在flask中即把底层的SQL数据转化为高层的python对象,通过python代码即可完成数据库操作。ORM实现了三层映射关系:
表 -> python类
字段(列) -> 类属性
记录(行) -> 类实例
二、使用Flask-SQLAlchemy管理数据库
初始化扩展类:
from flask_sqlalchemy import SQLAlchemey
db = SQLAlchemy(app)
-
连接数据库服务器
app.config[“SQLALCHEMY_DATABASE_URI”] = URI
关闭警告信息
app.config[“SQLALCHEMY_TRACK_MODIFICATIONS”] = False
-
定义数据库模型
class 类名(db.Model):
字段名 = db.Column(db.字段类型,参数)
常用参数有primary_key,unique,index,nullable,default
-
创建数据库和表
通过对db对象调用create_all()方法实现
三、数据库操作
-
Create
主要分为三步:
-
创建python对象(实例化模型)作为一条记录
-
添加新创建的记录导数据库会话
db.session.add(实例化模型)
-
提交数据库会话
db.session.commit()
-
-
Read
常用模式:
<模型类>
.query.<过滤方法>
.<查询方法>
常用过滤方法有:filter(),filter_by(),order_by(),limit(limit),group_by(),offset(offset)
常用查询方法有:all(),first()one(),get(id),count(),paginate()等
-
Update
直接赋值给模型类的字段属性就可以改变字段值,然后通过db.session.commit()提交会话
-
Delete
和添加记录类似,但把add()方法改为delete()方法后提交会话
四、定义关系
-
配置python shell上下文
用app.shell_context_processor作为装饰器注册即可
-
一对多
-
定义外键
db.ForeignKey(“表名.字段名”)
-
定义关系属性
db.relationship(“模型名”)
-
建立关系
调用append()方法将关系属性赋给实际的对象,remove()方法解除关系
-
建立双向关系
在关系属性添加参数back_populates = “表名”
也可以通过backref简化关系(只需在一个模型定义该参数即可)
-
-
一对一
在db.relationship()中将参数uselist设为False
-
多对多
除了关系两侧的模型外,还需要创建一个关联表(association_table),只用来存储两侧模型的外键对应关系,然后在其中一个类中使用参数secondary=association_table引入
五、更新数据库表
-
重新生成表
使用drop_all()方法删除表后再调用create_all()方法生成表(生产环境不可使用)
-
使用Flask-Migrate迁移数据库
-
创建迁移环境
flask db init
-
生成迁移脚本
flask db migrate -m “add 表名 字段名”
-
更新数据库
flask db upgrade
-
六、级联操作
通过在relationship内加入参数cascade就可以执行级联操作,即操作的某个对象时,其关联对象也会被一起执行。常用以下几个级联值:save-update,delete,delete-orphan
七、事件监听
使用db.event.listens_for(“监听对象”,“监听事件标识符”)注册事件回调函数