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

发布时间:2024年01月12日

一、SqlAlchemy 原理及环境搭建

SqlAlchemy是1个支持连接各种不同数据库的Python库,提供DBAPIORM(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 = id
        self.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'
文章来源:https://blog.csdn.net/captain5339/article/details/135561292
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。