2025-03-05
编程
00
请注意,本文编写于 54 天前,最后修改于 54 天前,其中某些信息可能已经过时。

目录

安装
基本概念
使用示例
1. 创建引擎并连接到数据库
2. 定义表结构
3. 创建表
4. 创建会话
5. 插入数据
6. 查询数据
7. 更新数据
8. 删除数据
更多功能
关联关系
事务管理

SQLAlchemy 是一个功能强大的 Python SQL 工具包和对象关系映射(ORM)库。

它提供了灵活的、高性能的数据库访问功能。无论是简单的查询还是复杂的事务处理,SQLAlchemy 都能提供全面的支持。它允许开发者以面向对象的方式操作数据库,而不需要直接编写 SQL 语句。

安装

首先,你需要安装 SQLAlchemy。可以通过 pip 来安装:

bash
pip install sqlalchemy

如果你还需要连接到特定类型的数据库(如 PostgreSQL、MySQL 等),你可能需要安装相应的数据库驱动程序。例如:

  • PostgreSQL: psycopg2
  • MySQL: mysqlclientPyMySQL
  • SQLite: 内置支持,无需额外安装

基本概念

在使用 SQLAlchemy 之前,了解一些基本概念是非常有帮助的:

  1. Engine: 数据库连接池。
  2. Session: 用于执行数据库操作的对象。
  3. Metadata: 数据库结构描述,包括表、列等信息。
  4. Table: 表定义。
  5. Mapper: 将 Python 类映射到数据库表的机制。
  6. Query: 构建和执行查询的对象。

使用示例

以下是一些具体的示例,展示了如何使用 SQLAlchemy 进行数据库操作。

1. 创建引擎并连接到数据库

python
from sqlalchemy import create_engine # 创建一个 SQLite 内存数据库引擎 engine = create_engine('sqlite:///:memory:', echo=True) # 如果你想连接到一个本地的 SQLite 文件数据库 # engine = create_engine('sqlite:///example.db') # 对于 PostgreSQL # engine = create_engine('postgresql+psycopg2://user:password@localhost/mydatabase')

2. 定义表结构

使用 ORM 模式时,你需要定义 Python 类来表示数据库中的表。

python
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String) age = Column(Integer) def __repr__(self): return f"<User(name='{self.name}', age={self.age})>"

3. 创建表

使用 Base.metadata.create_all() 方法创建表。

python
# 创建所有定义的表 Base.metadata.create_all(engine)

4. 创建会话

会话是与数据库进行交互的主要方式。

python
from sqlalchemy.orm import sessionmaker Session = sessionmaker(bind=engine) session = Session()

5. 插入数据

你可以通过实例化类来创建新记录,并使用会话将其添加到数据库中。

python
# 创建新用户 new_user = User(name='Alice', age=30) # 添加到会话 session.add(new_user) # 提交会话 session.commit()

6. 查询数据

SQLAlchemy 提供了多种方式来查询数据。

python
# 查询所有用户 users = session.query(User).all() for user in users: print(user) # 查询特定条件的用户 specific_user = session.query(User).filter_by(name='Alice').first() print(specific_user)

7. 更新数据

更新记录也非常简单。

python
# 查找用户 user_to_update = session.query(User).filter_by(name='Alice').first() # 修改用户信息 user_to_update.age = 31 # 提交会话 session.commit()

8. 删除数据

删除记录同样容易。

python
# 查找要删除的用户 user_to_delete = session.query(User).filter_by(name='Alice').first() # 删除用户 session.delete(user_to_delete) # 提交会话 session.commit()

更多功能

关联关系

SQLAlchemy 支持多种关联关系,如一对一、一对多、多对多等。

python
from sqlalchemy import ForeignKey from sqlalchemy.orm import relationship class Address(Base): __tablename__ = 'addresses' id = Column(Integer, primary_key=True) email_address = Column(String, nullable=False) user_id = Column(Integer, ForeignKey('users.id')) user = relationship("User", back_populates="addresses") User.addresses = relationship("Address", order_by=Address.id, back_populates="user")

事务管理

你可以使用 session.begin() 显式地管理事务。

python
with session.begin(): new_user = User(name='Bob', age=25) session.add(new_user) # 自动提交或回滚