SqlAlchemy使用教程(一) 原理与环境搭建

在这里插入图片描述

一、SqlAlchemy 原理及环境搭建

SqlAlchemy是1个支持连接各种不同数据库的Python库,提供Core APIORM(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数据。
  • Registry
    SqlAlchemy映射类属性,用于保存Column与数据库字段之间data type映射关系。
  • 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)验证安装是否成功

打开终端窗口,输出python,进入命令行模式,查看是否能成功显示版本号。

>>> import sqlalchemy
>>> print(sqlalchemy.__version__)
2.0.23
  • 19
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值