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 日志,再基于该引擎创建异步会话工厂,指定会话类型和提交后数据有效性规则;
  • 最后封装一个异步依赖函数,为调用方提供独立的数据库会话,同时自动处理事务提交、异常回滚及会话关闭,保障数据库连接的安全复用和操作的异常安全。
相关推荐
NineData31 分钟前
NineData 迁移评估功能正式上线
数据库·dba
NineData6 小时前
数据库迁移总踩坑?用 NineData 迁移评估,提前识别所有兼容性风险
数据库·程序员·云计算
赵渝强老师8 小时前
【赵渝强老师】PostgreSQL中表的碎片
数据库·postgresql
全栈老石12 小时前
拆解低代码引擎核心:元数据驱动的"万能表"架构
数据库·低代码
倔强的石头_1 天前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
jiayou643 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
李广坤3 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
爱可生开源社区4 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1775 天前
《从零搭建NestJS项目》
数据库·typescript
加号35 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql