【呆鸟译Py】玩转SQLAlchemy 01 - 简介

96
呆鸟的简书
1.9 2018.12.11 14:11* 字数 1846
玩转SQLAlchemy-01.png

玩转SQLAlchemy 01 - 简介
玩转SQLAlchemy 02 - 安装与关联数据库
玩转SQLAlchemy 03 - 数据类型


作为数据分析师,SQL 是基本功,作为 Python 数据分析师,当然要用更 Pythonic 的方式来处理 SQL,Python 生态圈里针对不同的数据库都提供了对应的接口,比如 PyMySQL 可以控制 MySQL,psycopg2 可以控制 PostgreSQL 等等。这么多 API 也着实不少,好在有 SQLAlchemy 这样的神器,让你学一个库就能控制多种关系型数据库,下面首先为大家简单介绍一下 SQLAlchemy 的优势。

SQLAlchemy 的优势

SQLAlchemy 是 Mike Bayer 于 2005 年开发的,十几年以后的今天,很多公司都在使用 SQLAlchemy 管理数据库,甚至有不少人都觉得 SQLAlchemy 是 Python 操控关系型数据库最好的方式。为什么这么说呢?

首先,SQLAlchemy 最大的优势是支持 MySQL 、SQLite 、PostgreSQL、Oracle 等多种常见数据库,开发者不用再操心数据库之间的区别,只要学会 SQLAlchemy 就可以用 Python 操作多种数据库。

第二,SQLAlchemy 从多种底层数据库里提取了 SQL 抽象代码,利用 SQLAlchemy 的通用语句和数据类型即可生成 SQL 语句,开发者无需编写原生 SQL 语句,就能方便、快捷地实现创建、更新、查询、测试等数据库管理操作,显然,这种方式更适合 Python 开发者的口味。

第三,SQLAlchemy 可以把数据库的表映射为 Python 的类或对象,一次操作即可实现对数据库的控制;还可以预先清洗和转义输入内容,避免 SQL 注入式攻击等常见问题。

第四,配合 Python 的 unittest,可以轻松实现数据库应用程序的测试。

第五,用 Alembic 控制 SQLAlchemy 迁移操作。不管是从同一数据库不同版本的迁移,还是从 Oracle 迁移到 MySQL,甚至是把数据从应用程序数据库迁移到数据仓库,Alembic 让这些迁移工作变得非常简单。

既然,SQLAlchemy 有这么多优势,那么 SQLAlchemy 到底是怎么实现开发?下面介绍一下它的两种开发模式。

SQLAlchemy 的两种模式,Core 与 ORM

Core 与 ORM

Core 是 SQLAlchemy 从多种后端数据库中提炼出来的 SQL 表达式语言,也可以说是以 Python 代码方式呈现的、实现 SQL 语言功能的标准化代码。

ORM 则与大多数编程语言的对象关系映射器(Object Relationship Mapper)基本一样。ORM 是比 Core 更抽象的解决方案,开发者能以更 Pythonic 的方式开发程序,这里特别需要说明的是 SQL 表达式语言(就是 Core)其实是 ORM 的底层技术。

既然两种方式都能操控数据库,那么哪种方式更好呢?其实,这两种方式都不错,语法差别也不是很大,选择哪一种方式主要看个人偏好及使用场景。

Core 与传统的 SQL 很像,主要使用概构[1]中心视图,关注数据表、键与索引等内容。建立数据仓库、编制数据报告、执行数据查询、操控未建模数据时,Core 更适用。

如果开发者更倾向于域驱动设计模式,ORM 把大部分数据库的底层概构和数据结构封装为元数据或业务对象,能够轻松实现数据建模、与数据库交互等功能,使开发者专注于开发流程。并且,ORM 构建于 Core 之上,在整合业务对象与数据仓库等操作时,ORM 也可以调用 Core 的功能,实现互补。

总得来说,如果你在 Core 与 ORM 之间犹豫不决,请参考以下建议:

建议使用 Core 的场景:

  • 用概构中心视图查看数据;
  • 处理不需要业务对象的数据;
  • 使用强大的报告功能。

建议使用 ORM 的场景:

  • 把数据当作业务对象;
  • 快速搭建系统原型。

当然,熟悉两者的开发者还可以混搭使用 Core 与 ORM 两种模式,开发出更强大、更灵活的数据库应用程序。

本文的目的

虽然 SQLAlchemy 有很多优势,应用也很广泛,但是网上对它的介绍往往很简单,也比较零碎,SQLAlchemy 的官网内容倒是很详细,但毕竟是英文,而且官方文档的内容过于庞杂,当参考资料看看还行,却不适合初学者入门。本文希望通过系统地介绍 SQLAlchemy,让大家更好地理解它的优势和功能,快速掌握 SQLAlchemy 这一强大的工具。

本文编写时,SQLAlchemy 已经升级为 1.3 版,Python 也升级到了 3.7 版,所以本文的代码是基于这两个版本编写的,但也基本适用于之前版本的大部分功能,还请大家注意。

本文的主要内容

本文将全面介绍 SQLAlchemy 的各种功能,主要包括:

  • 安装 SQLAlchemy
  • SQLAlchemy 关联数据库
  • SQLAlchemy 数据类型
  • SQLAlchemy 概构
  • 利用 SQLAlchemy 创建、更新数据库
  • 利用 SQLAlchemy 添加、删除、查询数据
  • SQLAlchemy 异常处理与事务
  • 测试 SQLAlchemy 数据库
  • SQLAlchemy 映射数据库
  • 利用 Alembic 迁移数据库

为了学习好 SQLAlchemy, 读者要具备一定的 Python 与 SQL 基础知识,建议 Python 新手,读读《Python基础教程(第三版)》这本书,对于SQL 初学者则建议看一下《SQL经典实例》这本书。

Python基础教程(第三版)
SQL经典实例

本文参照了 SQLAlchemy 官方文档,以及 Jason Myers 与 Rick Copeland 合著的Essential SQLAlchemy一书,有兴趣的读者,可以找来这本书看一下,或去 Github 下载这本书的源码,本文中的示例代码也多源于此。

image.png

本文的架构

本文参照 SQLAlchemy 官方文档与 Essential SQLAlchemy 一书的架构,首先,统一介绍 SQLAlchemy 的安装与关联数据库,然后,Core 与 ORM 分开讲述 SQLAlchemy 如何构建数据库、增加、删除、更新、查询数据记录,实现数据库的映射与测试,最后再介绍如何使用 Alembic 进行数据库迁移。

本人也是边学边写,虽然力图避免文字与代码出错,但错误仍在所难免,如有读者发现任何问题,欢迎随时指正。

下一篇,将为大家介绍如何安装 SQLAlchemy,并用 SQLAlchemy 关联数据库。


玩转SQLAlchemy 01 - 简介
玩转SQLAlchemy 02 - 安装与关联数据库
玩转SQLAlchemy 03 - 数据类型



  1. Schema,有人翻译成模式,有人翻译成架构,我取英文概图与架构的结合,把 schema 翻译为概构。

呆鸟译Py