Python中ORM(对象关系映射)的概念与实操---连接数据库

一、ORM是什么

ORM(Object-Relational Mapping)对象关系映射,它是一种程序设计技术,简单来讲就是把数据库的表映射成→编程语言中的类。数据行→对象、字段→属性。

让开发者可以用面向对象的方式操作对象,而非直接编写 SQL 语句,由 ORM 框架自动将对象的操作转换为数据库的 CRUD(增删改查)操作。

二、为什么要有ORM框架?

  • 在 ORM 出现前,开发者操作数据库的方式是「手写 SQL + 手动映射数据」,存在明显痛点:
  • 语言不统一:代码是面向对象思想,SQL语言是面向关系思想,思维切换成本高
  • 重复工作量大:每次查询都要将数据库返回的行数据切换成对象,插入更新又要将对象切换成SQL列字段。
  • 数据库耦合高:不同数据库SQL语法存在差异,切换数据库需要大规模修改SQL
  • 易出错:手写 SQL 容易出现语法错误、注入漏洞、字段名拼写错误等问题;
  • 维护成本高:SQL 散落在代码中,后期修改、优化、审计难度大

三、ORM框架具体怎么操作?

首先要知道主流的ORM 框架:

Django ORM (快速开发)和 SQLAlchemy 我常用的是SQLAlchemy(灵活通用)

通过定义「模型类」映射数据库表,再调用框架提供的 API 完成数据库操作(无需手写 SQL)。

SQLAlchemy为例,详细讲解从环境搭建到 CRUD 操作的完整流程。

①安装SQLAlchemy

pip install sqlalchemy

②初始化连接与基类

创建conf_db.py文件,

建立数据库链接、

创建异步引擎(管理连接池)

创建会话工厂(生成会话)

封装依赖函数(自动管理会话生命周期)

③定义模型类

④核心操作(CRUD)

conf_db.py文件

python 复制代码
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
from sqlalchemy.ext.asyncio import async_sessionmaker

# 数据库UR
ASYNC_DATABASE_URL = "mysql+aiomysql://root:root@localhost:3307/orm_db?charset=utf8mb4"
# 创建异步引擎
async_engine = create_async_engine(
    ASYNC_DATABASE_URL,
    echo=True,  # 可选:输出SQL日志
    pool_size=10,  # 设置连接池中保持的持久连接数
    max_overflow=20  # 设置连接池允许创建的额外连接数
)
# 创建异步会话工厂
AsyncSessionLocal = async_sessionmaker(
    bind=async_engine,
    class_=AsyncSession,
    expire_on_commit=False
)

# 依赖项,用于获取数据库会话
async def get_database():
    async with AsyncSessionLocal() as session:
        try:
            yield session
            await session.commit()
        except Exception:
            await session.rollback()
            raise
        finally:
            await session.close()

这段代码是 SQLAlchemy 异步操作 MySQL 数据库的基础配置:

  • 先导入异步引擎、会话及会话工厂等核心组件,定义包含连接信息的 MySQL 异步连接 URL;
  • 接着创建异步数据库引擎,配置连接池参数并开启 SQL 日志,再基于该引擎创建异步会话工厂,指定会话类型和提交后数据有效性规则;
  • 最后封装一个异步依赖函数,为调用方提供独立的数据库会话,同时自动处理事务提交、异常回滚及会话关闭,保障数据库连接的安全复用和操作的异常安全。
相关推荐
广州灵眸科技有限公司6 小时前
xfce桌面触摸校准:基于灵眸科技EASY-EAl-Orin-Nano
数据库·windows·科技
Cloud云卷云舒9 小时前
云卷云舒:从Oracle/MySQL迁移到HaishanDB:迁移评估工具核心技术拆解
mysql·oracle·ai-native·haishandb·信创数据库替换
憧憬成为web高手9 小时前
皮卡丘靶场速通--sql 2
数据库·sql·mybatis
段一凡-华北理工大学9 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
oradh11 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
z1234567898612 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD12 小时前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关
java_logo12 小时前
Docker Compose 部署 ClickHouse:快速搭建高性能列式数据库
数据库·clickhouse·docker·列式数据库·轩辕镜像·高性能数据库·clickhouse部署教程
TlSfoward13 小时前
抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具
数据库·爬虫·网络协议·搜索引擎·php
数智化管理手记13 小时前
账龄分析手工统计易遗漏?自动账龄分析工具怎么搭建
大数据·网络·数据库·人工智能·数据挖掘