Flask Web开发实战总结笔记4

一、ORM

​ ORM:Object Relational Mapping,对象关系映射,在flask中即把底层的SQL数据转化为高层的python对象,通过python代码即可完成数据库操作。ORM实现了三层映射关系:

​ 表 -> python类

​ 字段(列) -> 类属性

​ 记录(行) -> 类实例

二、使用Flask-SQLAlchemy管理数据库

​ 初始化扩展类:

​ from flask_sqlalchemy import SQLAlchemey

​ db = SQLAlchemy(app)

  1. 连接数据库服务器

    app.config[“SQLALCHEMY_DATABASE_URI”] = URI

    关闭警告信息

    app.config[“SQLALCHEMY_TRACK_MODIFICATIONS”] = False

  2. 定义数据库模型

    class 类名(db.Model):

    ​ 字段名 = db.Column(db.字段类型,参数)

    常用参数有primary_key,unique,index,nullable,default

  3. 创建数据库和表

    通过对db对象调用create_all()方法实现

三、数据库操作

  1. Create

    主要分为三步:

    1. 创建python对象(实例化模型)作为一条记录

    2. 添加新创建的记录导数据库会话

      db.session.add(实例化模型)

    3. 提交数据库会话

      db.session.commit()

  2. Read

    常用模式:<模型类>.query.<过滤方法>.<查询方法>

    常用过滤方法有:filter(),filter_by(),order_by(),limit(limit),group_by(),offset(offset)

    常用查询方法有:all(),first()one(),get(id),count(),paginate()等

  3. Update

    直接赋值给模型类的字段属性就可以改变字段值,然后通过db.session.commit()提交会话

  4. Delete

    和添加记录类似,但把add()方法改为delete()方法后提交会话

四、定义关系

  1. 配置python shell上下文

    用app.shell_context_processor作为装饰器注册即可

  2. 一对多

    1. 定义外键

      db.ForeignKey(“表名.字段名”)

    2. 定义关系属性

      db.relationship(“模型名”)

    3. 建立关系

      调用append()方法将关系属性赋给实际的对象,remove()方法解除关系

    4. 建立双向关系

      在关系属性添加参数back_populates = “表名”

      也可以通过backref简化关系(只需在一个模型定义该参数即可)

  3. 一对一

    在db.relationship()中将参数uselist设为False

  4. 多对多

    除了关系两侧的模型外,还需要创建一个关联表(association_table),只用来存储两侧模型的外键对应关系,然后在其中一个类中使用参数secondary=association_table引入

五、更新数据库表

  1. 重新生成表

    使用drop_all()方法删除表后再调用create_all()方法生成表(生产环境不可使用)

  2. 使用Flask-Migrate迁移数据库

    1. 创建迁移环境

      flask db init

    2. 生成迁移脚本

      flask db migrate -m “add 表名 字段名”

    3. 更新数据库

      flask db upgrade

六、级联操作

​ 通过在relationship内加入参数cascade就可以执行级联操作,即操作的某个对象时,其关联对象也会被一起执行。常用以下几个级联值:save-update,delete,delete-orphan

七、事件监听

​ 使用db.event.listens_for(“监听对象”,“监听事件标识符”)注册事件回调函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值