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

在这里插入图片描述

一、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'

相关推荐

  1. Jenkins环境使用

    2024-01-13 09:12:02       41 阅读
  2. React开发环境教程

    2024-01-13 09:12:02       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-13 09:12:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-13 09:12:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-13 09:12:02       87 阅读
  4. Python语言-面向对象

    2024-01-13 09:12:02       96 阅读

热门阅读

  1. c++简单做一个文件变长储存(自己封装字符串类)

    2024-01-13 09:12:02       48 阅读
  2. TCP/IP Illustrated Episode 23

    2024-01-13 09:12:02       53 阅读
  3. 【FastDDS源码剖析】定时器

    2024-01-13 09:12:02       42 阅读
  4. 若依微服务中的上传文件的前后端实现

    2024-01-13 09:12:02       49 阅读
  5. Redis 持久化有几种方式?

    2024-01-13 09:12:02       58 阅读
  6. 在Linux中创建文件的简单教程

    2024-01-13 09:12:02       51 阅读