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 日志,再基于该引擎创建异步会话工厂,指定会话类型和提交后数据有效性规则;
  • 最后封装一个异步依赖函数,为调用方提供独立的数据库会话,同时自动处理事务提交、异常回滚及会话关闭,保障数据库连接的安全复用和操作的异常安全。
相关推荐
IvorySQL20 分钟前
IvorySQL 5.6 发布:PG 18.6 内核升级,沙盒即开即用
数据库·人工智能·postgresql
CNSSIRD数据库1 小时前
中国企业环境信用数据库2003-2026
大数据·数据库·数据分析·论文笔记
fd32002 小时前
达梦数据库更新统计信息后仍走旧执行计划解决方案
数据库
华章酱2 小时前
MySQL幻读是怎么出现的
数据库·mysql·幻读
浅念-3 小时前
Redis基础详解:单线程模型、String与Hash数据结构
服务器·数据库·redis·sql·mysql·nosql数据库·nosql
updayday8543 小时前
离职域账号状态变更与Ping64操作记录核对
大数据·网络·数据库·安全·智能路由器
Nturmoils3 小时前
只恢复一张表,别把整个库都还回去
数据库
龙腾AI白云4 小时前
大语言模型:从语言理解到通用智能的跃迁
数据库·人工智能·机器学习·知识图谱
SelectDB4 小时前
快手基于 Apache Doris 千亿多模态检索的实践
大数据·数据库·数据分析
SelectDB4 小时前
StarRocks 迁移至 Apache Doris 完整指南:三步完成结构、数据与业务平滑切换
大数据·数据库·数据分析