一、概念理解

ORM(Object Relationnal Mapping) 对象映射关系,简单来说,就是不在数据库里直接进行操作,而是在项目开发里完成数据库的增删改查操作,将面向对象语言程序中的对象自动持久化到关系数据库中。
SQLAlchemy是flask框架的插件,用于连接数据库的工具

二、操作步骤

  1. 安装SQLAlchemy插件:pip install flask_sqlalchemy 导入:from flask_sqlalchemy import SQLAlchemy

  2. 连接数据库格式(以mysql为例,连接不同数据库有不同的格式要求,应具体情况具体分析):
    mysql+pymysql://用户名:密码@数据库IP:端口/数据库名?charset=utf8
    eg.
    SQLALCHEMY_DATABASE_URI='mysql+pymysql://root:[email protected]:3306/myblog?charset=utf8'

  3. 定义数据库模型(model)
    通过定义一个类来设计数据库模型,完成数据表(包括字段、外键、主键等)的设计,常用 的字段类型有Integer、String、DataTime、Boolean,例子如下:
    Flask 数据库SQLAlchemy
    需要注意几点:
    (1)类的属性名默认为字段名
    (2)类名的小写默认对应数据库表名,也可以指定表明,__tablename__
    (3)熟记字段的几个属性:id、primary_key、unique、index、default

  4. 完成数据库的映射工作:初始化、迁移、更新
    在项目程序中完成了对数据库的设计后,是时候更新到数据库中去了,主要分三个步骤:
    (1)初始化:flask db init,首次生成数据库迁移文件
    (2) 迁移:flask db migrate,完成数据库迁移的脚本工作
    (3)更新:flask db upgrade,完成数据库的更新工作,此项操作如果数据库有可视化操作软件的话,可以直接看到变化,如没有的话通过输入命令也可以查询

  5. 数据库操作:CRUD 增删改查
    (1)Create增加:
    创建类的实例对象,添加新创建的记录到数据库会话,提交数据库会话,eg.
    Flask 数据库SQLAlchemy
    (2)Read获取:
    从数据库中获取相关数据,有这样的公式:<模型类>.query.<过滤方法>.<查询方法>
    过滤方法可以获得更精确的查询,主要有filter、filter_by(以关键字表达式的方式)
    查询方法主要包括all()、first()、one()、get()等,具体方法怎么用自己查哈,这里只是给出一个知识框架
    User.query.filter_by(username='Susan').first()
    (3)Update更新
    直接赋值给字段属性就可以改变字段值,然后调用db.session.commit()
    (4)Delete删除
    跟增加差不多,把add(),改为delete(),eg .
    db.session.delete(user)
    db.session.commit()

可以将CRUD的语句应用到视图函数中去。

三、定义关系

关系型数据库最重要的就是表与表之间的关系,在设计数据库的时候如果设计的好可以满足大部分的功能需求,所以有必要学好这块,数据库关系有一对多、多对多、多对一

  1. 一对多。在多的这边定义外键,在一的这边定义映射关系
    (1)定义外键:用来在A表存储B表的主键值以便和B表建立联系的关系字段。eg.db.ForeignKey('author.id')
    (2)定义映射关系。主要使用了db.relationship()函数,常用的SQLAlchemy关系函数参数有back_populates、back、lazy等。

  2. 多对一:外键和关系属性都定义在“多”这一侧。
    eg.市民和城市属于多对一关系,在市民这边定义外键city_id,和关系“City”

  3. 一对一。分别在两表之间建立关系属性db.relationship(),并随便在一方定义外键db.ForeignKey()

  4. 多对多。两表之间无法直接建立外键和关系属性,需要额外添加一个关联表来处理。关联表不存储数据,只用来存储关系两侧模型的外键对应关系。

相关文章: