- SqlAlchemy使用教程(一) 原理与环境搭建
- SqlAlchemy使用教程(二) 入门示例及编程步骤
- SqlAlchemy使用教程(三) CoreAPI访问与操作数据库详解
- SqlAlchemy使用教程(四) MetaData 与 SQL Express Language 的使用
- SqlAlchemy使用教程(五) ORM API 编程入门
- SqlAlchemy使用教程(六) – ORM 表间关系的定义与CRUD操作
一、SqlAlchemy 原理及环境搭建
SqlAlchemy是1个支持连接各种不同数据库的Python库,提供Core API
与ORM
(object relation mapper)两种方式使用数据库。
Core API方式,即使用SQL封装方式访问数据库
ORM, 对象关系模型,是用 Python 类对象映射 Database表的一种方式。
官方文档:
https://docs.sqlalchemy.org/en/20/intro.html
1、SqlAlchemy 的架构与主要功能
1.1 架构图
SQLAlchemy 是由Core 与 ORM层组成, 在Core层,提供了Engine对象、MetaData与数据库API交互,而SQL Expression Language 是对 Sql 语句的封装,用以消除各数据API之间的差异,实现1套接口适用于所有数据库。
ORM 是在Core之上的抽象层,其更符合Python面向对象编程的思路,
1.2主要功能点
- 在Core层,可以使得DB API 直接操作数据库,也可以使用SQL Expression Language. 这是SqlAlchemy 提供的SQL表达式封装器。该接口层使用接近于原生SQL,可以令熟悉DB API(如sqlite3, mysql-connector等)的程序员快速上手。
- ORM 方式访问数据库,用 python 类与对象的方式操作数据库。
- 最大优点是:支持跨数据库。也就是说1套代码,不同的数据库都可以使用,如MySql, PostgreSql, MongDB等均可以,这使得项目进行数据库迁移非常容易。
很多知名公司、知名软件,如Flask 均使用 SqlAlchemy 做为数据库接口开发库, 掌握了SqlAlchemy以后,学习Django的ORM也非常轻松,原理与操作过程都非常接近,包括Node.js 的Sequelize的ORM库,也是类似的。
1.3 什么是ORM?
Object Relation Mapping (ORM)是用Python 对象映射到Database表的一种方法。SqlAlchemy 的ORM有点类似于Hibernate。
数据库的二维表数据,可以用Python list类型表示,使用 [dict, …] 形式,如下
[
{'id': '1', 'name': 'Michael'},
{'id': '2', 'name': 'Bob'},
{'id': '3', 'name': 'Adam'}
]
即数据库中的每行数据用1个字典类型表示,字典的key即字段名。使用 mysql-connector, sqlite3返回的数据结构就是像上面这样表示的。
如果将字典的key看作类的属性,那么列表中的每个字典元素可以理解为是1个类的实例,也就是1个object。因此,在ORM中,先定义1个class,每个属性表示1个 database table的1个字段。
class User(object):
def __init__(self, id, name):
self.id = id
self.name = name
数据库的每行数据就是该类的1个实例,这样1个table就可以用class + object list 来表示,这就是ORM (Object-Relational Mapping)的原理。
1.4 常用概念与术语
SqlAlchemy 使用了很多专用术语与名词,理解这些常用术语,不仅对于阅读官方文档,而且对于理解代码,也非常有帮助。
-
对象(object), 实例(instance)
对象与实例均为面对对象编程的概念,举例说明,对于Person类,jack=Persion(name="Jack", age=25)
,则 jack 称为Person类的1个实例,也是1个对象。 在本文中,对象与实例的含义是相同的。 -
Metadata
Metadata 通常是指“data that describes data”,通常翻译为元数据
。在SQLAlchemy中,“Metadata”定义了数据库、表、字段、约束和其他DDL对象结构,并将这些信息以python 的方式保存。可以理解为数据引擎对象的基础结构数据,与数据库中schema 的概念非常类似。 -
Insert Sentinel ,原义为“插入操作守卫哨兵”
这是一个SQLAlchemy特定的术语,指的是操作语句会返回一个结果列表,该列表可用于检查插入多行数据时,每行数据是否插入成功。 -
Session
Session,可以理解为ORM数据库操作的容器。Seesion从数据库加载实例,跟踪对Model实例的更改。 session 还有1个优点,可以传递给线程对象。 -
scalar subquery
指嵌套SELECT语句中的SELECT子句。
SELECT id, (SELECT name FROM address WHERE address.user_id=user.id)
FROM user
-
DB reflection
从当前已存在数据库的Table中获取数据库结构,并将其转换为sqlalchemy 的metadata数据。 -
DDL, DML, DQL
在SqlAlchemy 文档中,会经常看到这3个术语,这是SQL规范中的术语,其含义如下:
DDL – Data Definition Language,用于定义数据库、表结构的语法, 如CREATE TABLE, DROP TABLE 等
DQL – Data Query Language,数据查询语言, 主要是 SELECT语句
DML – Data Manipulation Language, 数据操作语言,如INSERT INTO, UPDATE,DELETE等
2. 环境搭建
1)安装
安装 sqlalchemy 库
pip install sqlalchemy
安装数据库驱动库,如安装mysql接口库:mysql-connector ,
pip3 install mysql-connector
Python3已内置 sqlite3 库,可以直接使用
2)验证安装是否成功文章来源:https://www.toymoban.com/news/detail-792542.html
打开终端窗口,输出python,进入命令行模式,查看是否能成功显示版本号。文章来源地址https://www.toymoban.com/news/detail-792542.html
>>> import sqlalchemy
>>> print(sqlalchemy.__version__)
2.0.23
到了这里,关于SqlAlchemy使用教程(一) 原理与环境搭建的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!