一、SqlAlchemy 原理及环境搭建
SqlAlchemy是1个支持连接各种不同数据库的Python库,提供DBAPI
与ORM
(object relation mapper)两种方式使用数据库。
DBAPI方式,即使用SQL方式访问数据库
ORM, 对象关系模型,是用 Python 类对象映射 Database表的一种方式。
官方文档:
https://docs.sqlalchemy.org/en/20/intro.html
1、SqlAlchemy 的架构与主要功能
1.1 架构图
SQLAlchemy 是由Core 与 ORM层组成, 在Core层,提供了Engine对象与数据库API交互,而SQL Expression Language 是对 Sql 语句的封装,用以消除各数据API之间的差异,实现1套接口适用于所有数据库。
ORM 是在Core之上的抽象层,其更符合面向对象编程的思路,
1.2主要功能点
在Core层,可以使得DB API 直接操作数据库,也可以使用SQL Expression Language. 这是SqlAlchemy 提供的SQL表达式封装器。该接口层使用接近于原生SQL,更方便python编程。
1.3 什么是ORM?
Object Relation Mapping (ORM)是用Python 对象映射到Database表的一种方法。SqlAlchemy 的ORM有点类似于Hibernate。
数据库的二维表数据,可以用Python list类型表示,使用 [tuple, …] 形式,如下
[('1', 'Michael'),('2', 'Bob'),('3', 'Adam')
]
使用 mysql-connector, sqlite3返回的数据结构就是像上面这样表示的。
而在ORM中,通过定义1个class,来表示db table的结构,
class User(object):def __init__(self, id, name):self.id = idself.name = name
每行数据是该类的1个实例对象, 这样1个table就可以用class + object list 来表示,这就是ORM (Object-Relational Mapping)的原理。
1.4 常用概念与术语
SqlAlchemy 使用了很多专用术语与名词,下面列出常用的术语及解释,可以帮助看懂官方文档。
- metadata, database metadata, table metadata
Metadata通常是指“data that describes data”。在SQLAlchemy中,术语“Metadata”元数据结构,它是关于数据库中表、字段、约束和其他DDL对象定义相关数据的集合。可以理解为数据引擎对象的基础结构,与数据库中schema 的概念类似。 - Insert Sentinel ,原义为“插入操作守卫哨兵”
这是一个特定于SQLAlchemy的术语,指的是一个列表,该列表可用于多行插入操作,以根据使用RETURNING值跟踪多行插入操作结果 。 - Session
Session 是ORM数据库操作的容器或作用域。Seesion从数据库加载实例,跟踪对Model实例的更改。 - scalar subquery
指嵌套闭SELECT中的SELECT子语句。
SELECT id, (SELECT name FROM address WHERE address.user_id=user.id)
FROM user
- DB reflection
从已存在数据库中获取数据库结构schema数据 。
2. 环境搭建
1)安装
安装 sqlalchemy 库
pip install sqlalchemy
安装数据库驱动库,如安装mysql接口库:mysql-connector ,
pip3 install mysql-connector
Python3已内置 sqlite3 库,可以直接使用
2)验证安装是否成功
打开终端窗口,输出python,进入命令行模式,查看是否能成功显示版本号。
>>> import sqlalchemy
>>>sqlalchemy.__version__
'1.2.7'