跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python

Python 与 SQLAlchemy:数据库管理入门指南

综述由AI生成使用 Python 和 SQLAlchemy 库进行数据库管理,涵盖安装、模型创建、连接设置、CRUD 操作及表关联配置。补充了会话管理与事务处理的最佳实践,展示如何通过 ORM 技术在不编写 SQL 的情况下高效操作关系型数据库,并提供异常处理与资源释放的代码示例。

观心发布于 2025/2/6更新于 2026/6/522 浏览
Python 与 SQLAlchemy:数据库管理入门指南

Python 与 SQLAlchemy:数据库管理入门指南

在这篇文章中,我们将学习如何使用 Python 和 SQLAlchemy 库来轻松管理数据库。SQLAlchemy 是一个强大的 ORM(对象关系映射)库,它允许您通过 Python 代码与关系型数据库进行交互,而无需编写复杂的 SQL 语句。

一、安装 SQLAlchemy

首先,确保您已经安装了 Python。然后,使用以下命令安装 SQLAlchemy 库:

pip install sqlalchemy

二、创建数据模型

在开始使用 SQLAlchemy 之前,我们需要创建一个数据模型来表示我们的数据。例如,假设我们有一个简单的应用程序,需要存储用户信息。我们可以创建一个 User 类来表示用户数据:

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)
    email = Column(String)

这里,我们首先从 SQLAlchemy 中导入所需的类和函数,然后创建一个 User 类,它继承自 Base。我们定义了一个表名 users,以及表示用户数据的列。

三、设置数据库连接

接下来,我们需要设置一个数据库连接。在这个例子中,我们将使用 SQLite 数据库,但 SQLAlchemy 支持多种数据库系统。创建一个名为 database.py 的文件,并添加以下代码来设置数据库连接:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

from model import Base, User

DATABASE_URL = 'sqlite:///users.db'

engine = create_engine(DATABASE_URL)
Base.metadata.create_all(engine)

Session = sessionmaker(bind=engine)
session = Session()

这里,我们导入了之前创建的 User 类以及一些其他 SQLAlchemy 组件。我们指定了一个 SQLite 数据库文件 users.db,然后创建了一个连接引擎。我们还创建了一个 Session 类,用于与数据库进行交互。

四、CRUD 操作

现在我们已经设置好了数据库连接,我们可以执行一些基本的 CRUD 操作。以下是一些示例:

创建(Create)

要添加新用户,我们可以创建一个新的 User 对象,然后将其添加到会话中:

new_user = User(name='John Doe', age=30, email='[email protected]')
session.add(new_user)
session.commit()

读取(Read)

若要从数据库中查询用户,我们可以使用 session.query() 方法:

users = session.query(User).all()
for user in users:
    print(user.name, user.age, user.email)

更新(Update)

若要更新现有用户的信息,我们可以查询用户,修改属性,然后提交更改:

user = session.query(User).filter(User.email == '[email protected]').first()
if user:
    user.age = 31
    session.commit()

删除(Delete)

若要从数据库中删除用户,我们可以查询用户,然后将其从会话中删除:

user = session.query(User).filter(User.email == '[email protected]').first()
if user:
    session.delete(user)
    session.commit()

五、关联和外键

SQLAlchemy 还支持表之间的关联和外键。例如,假设我们的应用程序还需要存储订单信息。我们可以创建一个 Order 类,并将其与 User 类关联:

from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship

class Order(Base):
    __tablename__ = 'orders'

    id = Column(Integer, primary_key=True)
    user_id = Column(Integer, ForeignKey('users.id'))
    product_name = Column(String)
    price = Column(Integer)

    user = relationship("User", back_populates="orders")

User.orders = relationship("Order", back_populates="user")

这里,我们创建了一个新的 Order 类,并定义了一个外键 user_id,它引用了 users 表的 id 列。我们还定义了一个 user 关系,用于访问与订单关联的用户。在 User 类中,我们添加了一个 orders 关系,用于访问与用户关联的所有订单。

现在,我们可以轻松地查询和管理用户及其订单:

# 创建一个新订单
order = Order(product_name='Laptop', price=1000, user=user)
session.add(order)
session.commit()

# 查询用户的所有订单
orders = session.query(Order).filter(Order.user_id == user.id).all()
for order in orders:
    print(order.product_name, order.price)

# 查询与订单关联的用户
order_user = session.query(User).filter(User.id == order.user_id).first()
print(order_user.name)

六、会话管理与最佳实践

在实际开发中,正确管理数据库会话至关重要。建议在使用完会话后及时关闭,或者使用上下文管理器来自动处理资源释放。此外,应始终在事务块中执行写操作,并在发生错误时回滚。

try:
    # 执行数据库操作
    session.add(new_user)
    session.commit()
except Exception as e:
    session.rollback()
    print(f"Error occurred: {e}")
finally:
    session.close()

通过使用 SQLAlchemy,我们可以轻松地管理和查询数据库,而无需编写原始 SQL 语句。它为许多不同的数据库系统提供了统一的 API,并具有许多其他高级功能,如事务和连接池。建议查阅官方文档以获取更多关于高级特性的信息。

目录

  1. Python 与 SQLAlchemy:数据库管理入门指南
  2. 一、安装 SQLAlchemy
  3. 二、创建数据模型
  4. 三、设置数据库连接
  5. 四、CRUD 操作
  6. 创建(Create)
  7. 读取(Read)
  8. 更新(Update)
  9. 删除(Delete)
  10. 五、关联和外键
  11. 创建一个新订单
  12. 查询用户的所有订单
  13. 查询与订单关联的用户
  14. 六、会话管理与最佳实践
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Java 对象的序列化和反序列化
  • Visual C++运行库修复指南:解决程序启动失败问题
  • SG 函数详解:博弈论通用解法与实战
  • 从零构建可扩展 Flutter 应用:v1.0 到 v2.0 架构演进详解
  • OpenClaw 腾讯云服务器部署与飞书对接实战指南
  • Flutter 三方库 arcade 的鸿蒙化适配指南
  • 人工智能与大模型核心技术体系及学习路径指南
  • 前端正则表达式实战指南:语法、API 与高频场景避坑
  • Java static 避坑:静态与非静态访问规则全解析
  • 前缀和算法:连续数组与矩阵区域和
  • Flutter 三方库 bavard 在鸿蒙端的适配实践:语义化消息协议与分布式通讯
  • 面试官常问:为什么 MySQL 不推荐滥用 JOIN?
  • 命令行工具 MCPHost:让大模型通过协议调用外部工具
  • 基于 Trae 构建本地 AI 对话机器人
  • 前端技术趋势:React 18、Server Components 与 AI 辅助
  • 基于 AgentFabric 微调 Qwen-7B 实现交互式智能体应用
  • .NET Core 使用 GraphQL.Server 在 Azure Functions 中实现依赖注入
  • 解决 Spring Boot 打包部署后 NoClassDefFoundError 问题
  • 华为 S5700 交换机 SSH/Telnet/Web 登录配置(V200R005C00SPC500)
  • Linux 常见命令及基础知识指南

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online