Python SQLAlchemy ORM操作MySQL数据库入门指南

Theo
Theo
发布时间:2026-10-16 | 28人浏览过
原创

使用Python的SQLAlchemy框架通过对象关系映射(ORM)技术操作MySQL数据库,无需编写复杂SQL语句即可实现数据表的增删改查。本文将介绍环境准备、数据库连接配置、ORM模型定义及表同步等核心步骤。

什么是ORM

ORM(Object Relational Mapping,对象关系映射)是一种编程技术,用于将面向对象编程语言中的对象映射到关系型数据库的表中。它充当了应用程序代码与数据库之间的桥梁,使开发者能够像操作普通对象一样处理数据库记录,从而简化数据存储逻辑。

ORM的重要特性

  • 面向对象编程思想:符合现代开发习惯,便于代码扩充与维护。
  • 提升开发效率:大幅减少甚至避免手写SQL语句,降低出错率。
  • 数据库无关性:支持多种数据库后端(如MySQL、PostgreSQL、Oracle等),切换底层数据库较为便捷。
  • 成熟的技术体系:能解决绝大多数常规的数据持久化需求。

选择SQLAlchemy框架

在众多ORM框架中,SQLAlchemy是Python生态中最具影响力且功能完备的选择之一。它不仅提供了面向过程的核心库,还包含了完整的ORM组件。

环境准备与安装

首先需要通过pip安装SQLAlchemy库。推荐使用指定版本以确保兼容性,例如:

pip install SQLAlchemy==1.4.17

安装完成后,可通过以下代码验证安装情况及版本号:

import sqlalchemy
print(sqlalchemy.__version__)

开始连接数据库

使用create_engine函数建立数据库引擎,这是所有数据库操作的基础。SQLAlchemy支持“延迟连接”机制,即只有在执行实际查询或写入操作时才会真正建立物理网络连接。

第1步:初始化引擎

入口:代码模块顶部。动作:调用create_engine传入连接字符串。

from sqlalchemy import create_engine

# 构建 MySQL 连接 URL
# 格式:dialect+driver://username:password@host:port/database[?parameters]
engine = create_engine(
    'mysql://root:@127.0.0.1:3306/school?charset=utf8',
    echo=True,      # 开启日志输出,调试时非常有用
    future=True     # 启用 SQLAlchemy 2.0 风格 API
)

参数说明:

  • URL:指定数据库类型(mysql)、连接器、用户名、密码、主机地址和端口。
  • echo:布尔值,设为True时会打印所有生成的SQL语句,便于排查问题。
  • future:布尔值,建议启用以遵循最新的API规范。

第2步:处理含特殊字符的密码

若数据库密码包含特殊字符(如%、&等),直接拼接进URL可能导致解析错误。此时应使用urllib.parse.quote_plus对密码进行URL编码。

from urllib.parse import quote_plus

# 假设密码为 mima%&&&mima
raw_password = "mima%&&&mima"
encoded_password = quote_plus(raw_password)

# 将编码后的密码填入连接字符串
url = f"mysql://root:{encoded_password}@127.0.0.1:3306/school?charset=utf8"
engine = create_engine(url, echo=True, future=True)

声明ORM模型基类

在使用SQLAlchemy的ORM功能前,需要创建一个基类。这个基类是所有后续数据库模型类的父类,负责管理元数据(Metadata)。

from sqlalchemy.orm import declarative_base

# 声明ORM模型基类
Base = declarative_base()

实现ORM模型类

ORM模型类通常继承自上述创建的Base。每个类对应数据库中的一张表,类属性对应表的列。

第3步:定义学生信息表模型

入口:定义新文件或使用现有模块。动作:创建继承自Base的类,并定义列属性。

from sqlalchemy import Column, Integer, String, DateTime

class Student(Base):
    """学生信息表"""
    __tablename__ = 'student'  # 指定数据库表名
    
    id = Column(Integer, primary_key=True, name='id')          # 主键
    stu_no = Column(Integer, nullable=False, comment='学号')   # 非空字段
    stu_name = Column(String(16), nullable=False, comment='姓名') # 变长字符串
    created_at = Column(DateTime)                              # 时间戳

注意事项:

  1. 在同步表结构之前,必须确保MySQL数据库中已经创建了目标数据库(如示例中的school库),否则操作会失败。
  2. 常见字段类型包括:Integer(整型)、String(字符串)、DateTime(日期时间)等。

同步数据库表

完成模型定义后,需要将Python类的结构同步到物理数据库中。

第4步:创建或删除表

入口:调用metadata方法。动作:使用create_all生成表,或使用drop_all删除表。

# 从之前的导入中获取 engine 和 Base
from orm_connect_example import Base, engine

# 创建表(若不存在则创建)
Base.metadata.create_all(engine)

# 删除所有已创建的表(谨慎使用!)
# Base.metadata.drop_all(engine)

完整代码示例

以下是整合上述步骤的完整参考代码:

from sqlalchemy import create_engine, Column, Integer, String, DateTime
from sqlalchemy.orm import declarative_base

# 第一步:准备数据库连接
# 注意:请根据实际情况修改 IP、端口、数据库名及密码
engine = create_engine(
    'mysql://root:@10.72.100.1:8081/test_database_1?charset=utf8',
    echo=True
)

# 第二步:声明ORM模型的基类
Base = declarative_base()

# 第三步:实现ORM模型类
class Student(Base):
    """学生信息表"""
    __tablename__ = 'student'
    
    id = Column(Integer, primary_key=True, name='id')
    stu_no = Column(Integer, nullable=False, comment='学号')
    stu_name = Column(String(16), nullable=False, comment='姓名')
    created_at = Column(DateTime)

# 第四步:同步数据库表
def sync_tables():
    """同步数据库表结构"""
    print("正在创建/检查表...")
    Base.metadata.create_all(bind=engine)
    # Base.metadata.drop_all(bind=engine)  # 如需重置,可取消注释此行

if __name__ == '__main__':
    sync_tables()

以上就是Python SQLAlchemy ORM操作MySQL数据库的详细流程。通过这一套标准动作,你可以快速建立起应用程序与数据库之间的稳定连接。更多关于数据库高级用法及ORM查询优化的资料,请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表