ORM工具之SQLAlchemy

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 类进行操作的场景。

  • 14
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值