SQLAlchemy 是一个功能强大的 Python SQL 工具包和对象关系映射(ORM)库,用于管理和操作关系数据库。它为 Python 开发者提供了一种用 Python 对象来运行和管理 SQL 数据库的方式。
目录
[SQLAlchemy 的两个核心组成部分](#SQLAlchemy 的两个核心组成部分)
[SQLAlchemy 的主要功能](#SQLAlchemy 的主要功能)
[使用 SQLAlchemy 建立模型示例](#使用 SQLAlchemy 建立模型示例)
[1、安装 SQLAlchemy](#1、安装 SQLAlchemy)
SQLAlchemy 的两个核心组成部分
-
SQLAlchemy Core:提供了数据库的直接访问,通过构建 SQL 表达式来执行查询。适合于需要精细控制 SQL的项目。
-
SQLAlchemy ORM:允许你将 Python 类定义为数据库表对象,以对象的方式进行数据库操作。适合于更高层抽象级别的数据处理。
SQLAlchemy 的主要功能
- 数据库连接和引擎创建 :通过
create_engine()
函数建立到数据库的连接。 - 元数据管理 :使用
MetaData
和Table
定义数据库结构。 - SQL 表达式:使用 SQL表达式语言进行复杂查询。
- ORM:使用 Python 类和对象操作数据,提高开发效率。
- 关系映射:支持多对多、一对多及多种复杂关系的映射。
- 事务管理 :通过
Session
管理事务。
使用 SQLAlchemy 建立模型的过程是将数据库表映射到 Python 类,以便于用面向对象的方法进行数据库操作。下面是建立一个 SQLAlchemy 模型的基本步骤,包括定义类、设置列和关系等。
使用 SQLAlchemy 建立模型示例
1、安装 SQLAlchemy
确保安装 SQLAlchemy 库:
python
pip install sqlalchemy
2、导入所需模块
python
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, sessionmaker
3、创建数据库连接
使用 create_engine
创建一个数据库连接。这里以 SQLite 为例:
python
engine = create_engine('sqlite:///example.db')
4、创建基类
使用 declarative_base
创建一个基类,所有模型类将从这个基类继承:
python
Base = declarative_base()
5、定义模型
定义模型类以映射数据库表和列。例如,我们创建两个简单的表:用户和地址。
python
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
address_id = Column(Integer, ForeignKey('addresses.id'))
address = relationship("Address", back_populates="user")
def __repr__(self):
return f"<User(name={self.name}, address_id={self.address_id})>"
class Address(Base):
__tablename__ = 'addresses'
id = Column(Integer, primary_key=True)
email_address = Column(String, nullable=False)
user = relationship("User", back_populates="address")
def __repr__(self):
return f"<Address(email_address={self.email_address})>"
__tablename__
指定数据库表名。Column
定义表中的列类型和属性。primary_key
用于设置主键。ForeignKey
用于建立表间的外键关系。relationship
用于定义表间的关系,并帮助 SQLAlchemy 在内存中管理这些关系。
6、创建表
通过 Base.metadata.create_all
将定义的模型映射到数据库并创建实际的表结构:
python
Base.metadata.create_all(engine)
7、创建和使用会话
- 利用
sessionmaker
创建一个用于数据库操作的会话:
python
Session = sessionmaker(bind=engine)
session = Session()
- 使用会话添加和查询数据:
python
# 添加记录
new_address = Address(email_address="alice@example.com")
new_user = User(name="Alice", address=new_address)
session.add(new_user)
session.commit()
# 查询记录
user = session.query(User).filter_by(name='Alice').first()
print(user)
# 关闭会话
session.close()
注意事项
- 对象关系映射(ORM):通过 SQLAlchemy 的 ORM,可以使用 Python 类和对象与数据库进行交互,不需要直接编写 SQL。
- 对象关系管理 :
relationship
在处理多表关系时非常有用。 - 事务控制 :
session
用于处理数据库事务,为保证数据一致性,需注意对会话进行提交或回滚操作。
使用 SQLAlchemy 建立模型可以帮助我们以面向对象的方式管理数据库,提升代码的可维护性和可读性,利用其强大的 ORM功能实现数据层的一个逻辑抽象和业务逻辑分离。