Skip to content

今日和总访问量

SQLAlchemy 2.0 介绍 ​

SQLAlchemy 2.0 是 Python 编程语言中的一个强大的 SQL 工具包和对象关系映射(ORM)框架。它在 SQLAlchemy 1.x 的基础上进行了重大更新,旨在提升性能、简化 API、增强类型安全性,并更好地支持现代 Python 特性。以下是对 SQLAlchemy 2.0 的详细介绍:

主要特性与变化 ​

1. 统一的 API ​

SQLAlchemy 2.0 将 Core(核心 SQL 操作)和 ORM(对象关系映射)的 API 进行了统一。开发者可以无缝地在 Core 和 ORM 之间切换,使用一致的接口执行 SQL 查询和对象操作,这大大提高了开发的灵活性和便利性。

2. 异步支持 ​

SQLAlchemy 2.0 引入了对异步编程的原生支持。通过使用 Python 的 async 和 await 关键字,开发者可以编写异步数据库操作代码。这对于构建高并发、高性能的 Web 应用程序尤为重要。

3. 类型注解 ​

SQLAlchemy 2.0 充分利用了 Python 的类型注解功能(Type Hints),提供了更强的类型安全性。这不仅能帮助开发者在编写代码时减少错误,还能提升代码的可读性和可维护性,尤其是在大型项目中。

4. 新的查询 API ​

SQLAlchemy 2.0 推出了全新的“Select”查询 API,取代了旧版的“Query”API。新 API 设计更直观、更灵活,支持更复杂的查询操作,同时优化了查询性能。

5. 性能优化 ​

SQLAlchemy 2.0 在性能方面进行了大幅改进,包括:

  • 更快的 ORM 对象加载速度;
  • 更高效的 SQL 语句生成和执行;
  • 整体资源占用更低。

6. 增强的 ORM 支持 ​

SQLAlchemy 2.0 改进了 ORM 的功能,包括:

  • 更优化的关系加载策略(如 lazy loading、eager loading 等);
  • 增强的对象继承支持;
  • 更灵活的映射配置方式。

7. 简化配置 ​

SQLAlchemy 2.0 减少了配置过程中的样板代码,简化了初始化和使用流程。开发者可以更快速地搭建和使用数据库连接,提升开发效率。

8. 向后兼容性 ​

尽管 SQLAlchemy 2.0 带来了许多新特性和变化,但它仍然保持了对 1.x 版本的向后兼容性。开发者可以逐步将现有项目迁移到 2.0,而无需完全重写代码。

总结 ​

SQLAlchemy 2.0 是一个功能强大且现代化的数据库工具包,它通过统一的 API、异步支持、类型安全性和性能优化,为 Python 开发者提供了高效、灵活的数据库操作方式。无论是构建小型应用还是大型企业系统,SQLAlchemy 2.0 都能满足现代开发需求,是 Python 生态中不可或缺的工具之一。

增删改查 ​

以下是使用 SQLAlchemy 2.0 进行增删改查(CRUD)操作的示例代码。这些示例假设你已经安装了 SQLAlchemy 2.0,并有一个数据库(例如 SQLite)可供使用。


1. 创建数据库引擎和会话 ​

首先,我们需要创建一个数据库引擎和会话。会话是执行 CRUD 操作的主要接口。

python
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

# 创建数据库引擎(以 SQLite 为例)
engine = create_engine('sqlite:///example.db', echo=True)

# 创建会话工厂
Session = sessionmaker(bind=engine)

# 创建会话实例
session = Session()
  • echo=True:开启日志输出,便于调试。
  • Session:会话工厂,用于生成会话实例。

2. 定义模型 ​

在 SQLAlchemy 中,数据库表通过模型类定义。以下是一个简单的 User 模型示例:

python
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import declarative_base

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'  # 表名
    id = Column(Integer, primary_key=True)  # 主键
    name = Column(String)  # 姓名列
    age = Column(Integer)  # 年龄列
  • declarative_base():创建基类,用于定义模型。
  • __tablename__:指定数据库中的表名。
  • Column:定义表的列及其数据类型。

3. 创建表 ​

在执行 CRUD 操作之前,需要创建数据库表:

python
Base.metadata.create_all(engine)

这会根据定义的模型在数据库中创建对应的表。


4. 增(Create) ​

向数据库中插入新记录:

python
# 创建一个新用户
new_user = User(name='Alice', age=30)

# 将新用户添加到会话
session.add(new_user)

# 提交会话以保存到数据库
session.commit()
  • session.add():将新记录添加到会话。
  • session.commit():提交会话,将更改保存到数据库。

5. 查(Read) ​

从数据库中查询记录:

python
# 查询所有用户
users = session.query(User).all()
for user in users:
    print(user.id, user.name, user.age)

# 查询特定用户(例如,ID 为 1 的用户)
user = session.query(User).filter_by(id=1).first()
if user:
    print(user.name, user.age)
  • session.query():创建查询对象。
  • .all():返回所有结果的列表。
  • .filter_by():按条件过滤。
  • .first():返回第一个匹配的结果。

6. 改(Update) ​

更新数据库中的记录:

python
# 查询要更新的用户
user_to_update = session.query(User).filter_by(id=1).first()

if user_to_update:
    # 更新用户的年龄
    user_to_update.age = 31
    # 提交会话以保存更改
    session.commit()
  • 修改对象属性后,使用 session.commit() 提交更改。

7. 删(Delete) ​

从数据库中删除记录:

python
# 查询要删除的用户
user_to_delete = session.query(User).filter_by(id=1).first()

if user_to_delete:
    # 从会话中删除用户
    session.delete(user_to_delete)
    # 提交会话以保存更改
    session.commit()
  • session.delete():从会话中移除记录。
  • session.commit():提交删除操作。

完整示例代码 ​

以下是将上述步骤整合的完整代码:

python
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker, declarative_base

# 创建数据库引擎
engine = create_engine('sqlite:///example.db', echo=True)

# 创建会话工厂
Session = sessionmaker(bind=engine)

# 创建会话实例
session = Session()

# 定义模型
Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)

# 创建表
Base.metadata.create_all(engine)

# 增(Create)
new_user = User(name='Alice', age=30)
session.add(new_user)
session.commit()

# 查(Read)
users = session.query(User).all()
for user in users:
    print(user.id, user.name, user.age)

# 改(Update)
user_to_update = session.query(User).filter_by(id=1).first()
if user_to_update:
    user_to_update.age = 31
    session.commit()

# 删(Delete)
user_to_delete = session.query(User).filter_by(id=1).first()
if user_to_delete:
    session.delete(user_to_delete)
    session.commit()

说明 ​

  • 引擎和会话:引擎负责连接数据库,会话用于执行 CRUD 操作。
  • 模型:通过类定义数据库表结构。
  • 增(Create):创建实例并提交。
  • 查(Read):支持多种查询方式。
  • 改(Update):修改属性后提交。
  • 删(Delete):删除记录后提交。

这些示例展示了 SQLAlchemy 2.0 的基本 CRUD 操作,你可以根据需求扩展功能,例如添加复杂查询或处理表关系。

今日和总访问量
本站收录内容源自互联网,不对其网站内容或交易负责。 | 如有内容侵犯权益,请联系站长删除相关内容!