Flask开发(十九)Flask访问数据库 初识Flask-SQLAlchemy

内容纲要

本篇导读:

  • SQLAlchemy及相关依赖的安装
  • 对象关系映射实质
  • 使用ORM的意义

SQL-Alchemy是一个基于Python实现的ORM(Object Relational Mapping,对象关系映射)框架。该框架建立在DB API之上,使用对象关系映射进行数据库操作。价而言之便是将类和对象转换为SQL语句,然后使用数据API执行SQL并获取执行结果。他的核心思想在于将关系数据库表中记录映射成对象,以对象的形式展示,程序员可以把对数据库的操作转化为对对象的操作。

SQLAlchemy及相关依赖的安装

安装Flask-SQLAlchemy框架可以使用以下命令:

pip install flask-sqlalchemy

也可以使用PyCharm中输入Flask-SQLAlchemy直接安装。

如果连接的是MySQL数据库,则需要安装PyMySQL,使用命令pip install pymysql安装。

对象关系映射实质

现有一个SQL语句如下:

create table book(`id` int(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
`title` varchar(50),
`publish_office` varchar(100),
`isbn` varchar(4));

还有一个book对象:

class Book(db.Model):
    __tablename__='book'
    id=db.Column(db.Integer,primary_key=True,autoincrement=True)
    title=db.Column(db.String(50),nullable=False)
    publishing_office=db.Column(db.String(100),nullable=False)
    isbn=db.Column(db.String(100),nullable=False)

能否建立以下3点对应关系呢?

  • book类->数据库中的一张表
  • book类中的属性->数据库中的一张表中的字段
  • book类的一个对象 -> 数据库中的一条记录(数据)

答案是显而易见的。falsk-sqlalchemy能帮我们建立这几种对应关系。

Flask-SQLAlchemy这个ORM框架使我们操作数据库变成了操作对象,一个表被抽象成了一个类,一个表中的字段被抽象成了一个类中的多个属性,一条数据就被抽象成了该类的一个实例对象,不用再写繁琐的SQL语句了。关系数据库的表与对象的映射还可以用一张表来进一步概括:

面向对象概念面向关系概念
属性表的字段
对象表的一行记录

 为什么使用ORM

以下是ORM的优点:

  • 简单:ORM以最基本的形式建模数据。比如ORM会将MySQL的一张表映射成一个类(模型),表的字段就是这个类的成员变量。
  • 精确:ORM使所有的MySQL数据表都按照统一的标准精确地映射成一个类,使系统在代码层面保持准确统一。
  • 易懂:ORM使数据库结构文档化,程序员可以把大部分精力用在Web功能的开发和实现上,而不需要花费时间和精力在底层数据库驱动上。
  • 易用:ORM包含对持久化类对象进行CRUD操作的API,例如create()、update()、save()、load()、find()、find_all()、where()等,也就是将SQL查询全部封装成了编程语言的函数,通过函数的链式组合生成最终的SQL语句。通过这种封装避免了不规范、冗余、风格不统一的SQL语句,可以避免很多人为BUG,方便编码风格的统一和后期维护。

综上所述,使用ORM框架的最大优点是解决了重复读取数据库的问题,使程序员高效开发成为可能。最大的不足之处在于会牺牲程序的执行效率,特别是处理多表联查、where条件复杂之类的查询时,ORM语法会变得复杂。

阅读剩余
THE END