Flask 数据库SQLAlchemy 基础讲解

一、概念理解

数据库分为关系型数据库和泛指型数据库,典型的关系型数据库SQL有Oracle、SQLServer、MYSQL等,泛指型数据库NoSQL又分为用于存储实时消息的文档型数据库MongoDB、CoachDB和用于存储缓存的键值对型数据库Redis、Riak.

ORM(Object Relationnal Mapping) 对象映射关系,简单来说,就是不在数据库里直接进行操作,而是在项目开发中把底层的数据库实体转换为高层的python对象,通过对对象的一系列操作完成数据库的增删改查操作,将面向对象语言程序中的对象自动持久化到关系数据库中。

SQLAlchemy是flask框架的插件,用于连接数据库的工具,它的实例对象db=SQLAlchemy(app)就是作为操控数据库的对象

二、操作步骤

  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:123456@localhost:3306/myblog?charset=utf8'

  3. 定义数据库模型(model)
    通过定义一个类来设计数据库模型,完成数据表(包括字段、外键、主键等)的设计,表的字段由db.Colum类的实例来表示,字段类型用第一个参数表示,常用的字段类型有Integer、String、DataTime、Boolean,例子如下:
    在这里插入图片描述
    需要注意几点:
    (1)类与数据库表列的对应关系是:类--->表,类属性--->列,类实例对象--->行
    (2)类名的小写默认对应数据库表名,也可以指定表明,__tablename__=‘’表名
    (3)所有的表类都必须继承db.Model
    (4)熟记字段的几个属性:id、primary_key、unique、index、default

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

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

*注意:*利用会话机制session进行数据库操作,db.sesssion.add(实例)将记录添加到会话缓存中,db.session.commit()将记录提交到数据库中去。

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

三、定义关系

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

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

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

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

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

四、更新数据库表

模型类不是一成不变的,发生如下情况时需要进行更新到数据库中去:

  • 添加了新的模型类
  • 在模型类添加了新的字段
  • 在模型了修改了字段的名称或类型

操作方法:

  1. 先删除再创建。db.drop_all()再用db.create_all()。优点:简单直接,缺点:丢失数据库中的所有数据
  2. 采用数据库迁移工具Alembic,使用该工具可以在不破坏数据的情况下更新数据库表的结构。操作步骤如下:

(1)安装flask工具flask-migrate,使用Migrate类的实例化对象(传入程序实例对象app和数据库对象db作为参数)进行迁移

pip install flask-migrate
from flask-migrate import Migrate
migrate=Migrate(app,db)

(2)初始化迁移环境
在命令行下,输入命令:flask db init
(3) 生成迁移脚本
在命令行下,输入命令:flask db migrate -m '描述信息'
(4)更新数据库
在命令行下,输入命令:flask db upgrade

五、总结

到此为止,Flask框架数据库有关于SQLAlchemy的知识大概梳理了一遍,方便以后复习和查找时快速上手!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值