返回

SQLAlchemy 简介

后端

从关系型数据库到更复杂的 NoSQL 数据库,在实际编程中,我们通过 ORM(对象-关系映射)技术,实现数据库的查询和存储功能。其中,SQLAlchemy 是目前 Python 中使用最广泛的 ORM 工具包。

本文将对 SQLAlchemy 进行详细介绍,全面讲解 SQLAlchemy 的基本概念、使用方法、以及一些最佳实践。

SQLAlchemy 是一个开源的 SQL 工具包和对象关系映射(ORM)框架。它允许 Python 程序员使用高级的类来定义与数据库中的表进行映射的数据模型,而无需直接编写 SQL 语句。

SQLAlchemy 支持多种数据库,包括 MySQL、PostgreSQL、SQLite、Oracle、Microsoft SQL Server 等。它还提供了一个统一的 API,允许程序员以相同的方式操作不同的数据库。

会话是 SQLAlchemy 的核心概念。会话代表了与数据库的连接,并允许程序员执行查询和更新操作。会话是线程安全的,这意味着它可以在多个线程中同时使用。

模型是 Python 中的类,用于表示数据库中的表。模型中的每个属性对应着表中的一列。SQLAlchemy 会自动将模型映射到数据库中的表。

查询是用于检索数据库中数据的对象。查询可以通过过滤器、排序、分组和其他操作来进行构建。SQLAlchemy 的查询对象是惰性的,这意味着只有在需要的时候才会执行查询。

要使用 SQLAlchemy,首先需要创建一个会话。会话可以通过 SQLAlchemy 的 create_engine() 函数来创建。

from sqlalchemy import create_engine

engine = create_engine('sqlite:///mydb.db')
session = engine.sessionmaker()()

接下来,需要定义模型来表示数据库中的表。模型可以通过继承 SQLAlchemy 的 Model 类来定义。

from sqlalchemy.orm import declarative_base

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String(50), unique=True)
    email = Column(String(120), unique=True)

在定义模型之后,需要创建表。表可以通过 SQLAlchemy 的 create_all() 函数来创建。

Base.metadata.create_all(engine)

要插入数据,可以使用会话的 add() 方法。

user = User(name='John Doe', email='johndoe@example.com')
session.add(user)
session.commit()

要查询数据,可以使用会话的 query() 方法。

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

关系允许您在模型之间建立关系。关系可以通过 SQLAlchemy 的 relationship() 函数来定义。

class Post(Base):
    __tablename__ = 'posts'

    id = Column(Integer, primary_key=True)
    title = Column(String(50))
    body = Column(Text)

    author_id = Column(Integer, ForeignKey('users.id'))
    author = relationship("User", back_populates="posts")

事件允许您在特定操作发生时执行代码。事件可以通过 SQLAlchemy 的 event.listen() 函数来定义。

@event.listens_for(User, 'before_insert')
def before_insert(mapper, connection, target):
    target.created_at = datetime.now()

扩展允许您在 SQLAlchemy 中添加额外的功能。扩展可以通过 SQLAlchemy 的 install() 函数来安装。

from sqlalchemy_utils import UUIDType

UUIDType.install()

SQLAlchemy 是一个强大的 ORM 工具包,可以帮助 Python 程序员轻松地操作数据库。本文只是介绍了 SQLAlchemy 的基本概念和使用方法,如果您想了解更多关于 SQLAlchemy 的信息,可以参考 SQLAlchemy 的官方文档。