SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具,使用MIT许可证发行。
SQLAlchemy“采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型”。SQLAlchemy的理念是,SQL数据库的量级和性能重要于对象集合;而对象集合的抽象又重要于表和行。因此,SQLAlchemy采用了类似于Java里Hibernate的数据映射模型,而不是其他ORM框架采用的Active Record模型。不过,Elixir和declarative等可选插件可以让用户使用声明语法。
SQLAlchemy首次发行于2006年2月,并迅速地在Python社区中成为广泛使用的ORM工具之一,不亚于Django的ORM框架。
核心组件
1. SQLAlchemy Core
SQLAlchemy Core 是 SQLAlchemy 的核心,它提供了一种 SQL 表达语言(SQL Expression Language)和一个数据库引擎。SQL Expression Language 允许用户使用 Python 代码来构建 SQL 语句,而数据库引擎则负责与数据库的连接和执行 SQL 语句。
核心概念
- Engine:表示与特定数据库的连接,管理数据库连接池。
- MetaData:持有一组表的描述,包括表名、列、数据类型等。
- Table:表示数据库中的一个表。
- Column:表示表中的一个列。
- SQL Expression Language:允许用户使用 Python 代码来构建 SQL 语句。
2. SQLAlchemy ORM
SQLAlchemy ORM 提供了一种高层次的对象关系映射,它使得开发者可以将数据库表映射为 Python 类,并使用 Python 类和对象来进行数据库操作。
核心概念
- Declarative System:允许用户使用 Python 类定义数据库表和映射关系。
- Session:负责所有与数据库的交互,它是 ORM 操作的主要入口。
- Query:提供了一种查询接口,允许用户使用 Python 表达式来构建 SQL 查询。
使用示例
1. 安装 SQLAlchemy
你可以使用 pip 安装 SQLAlchemy:
pip install sqlalchemy
2. 使用 SQLAlchemy Core
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String# 创建数据库引擎
engine = create_engine('sqlite:///example.db', echo=True)# 创建 MetaData 实例
metadata = MetaData()# 定义表
user_table = Table('user', metadata,Column('id', Integer, primary_key=True),Column('name', String),Column('age', Integer)
)# 创建表
metadata.create_all(engine)# 插入数据
with engine.connect() as connection:connection.execute(user_table.insert(), [{'name': 'Alice', 'age': 25},{'name': 'Bob', 'age': 30}])# 查询数据
with engine.connect() as connection:result = connection.execute(user_table.select())for row in result:print(row)
3. 使用 SQLAlchemy ORM
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker# 创建数据库引擎
engine = create_engine('sqlite:///example.db', echo=True)# 创建 Base 类
Base = declarative_base()# 定义映射类
class User(Base):__tablename__ = 'user'id = Column(Integer, primary_key=True)name = Column(String)age = Column(Integer)# 创建表
Base.metadata.create_all(engine)# 创建 Session 类
Session = sessionmaker(bind=engine)
session = Session()# 插入数据
new_user = User(name='Alice', age=25)
session.add(new_user)
session.commit()# 查询数据
users = session.query(User).all()
for user in users:print(user.name, user.age)
总结
SQLAlchemy 是一个功能强大且灵活的库,适用于不同规模的应用程序。它提供了两种主要的编程接口:SQLAlchemy Core 和 SQLAlchemy ORM,分别适用于不同的开发需求。SQLAlchemy Core 适合需要直接操作 SQL 语句的场景,而 SQLAlchemy ORM 则适合需要将数据库表映射为 Python 类进行操作的场景。