0Pricing
Python Academy · 课时

SQLAlchemy Core 与 ORM

理解这两个层次

SQLAlchemy Core 与 ORM 是 CoddyKit 上的免费 Python Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Python Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Python Academy 课程共包含 4 节课。

什么是 SQLAlchemy

SQLAlchemy 是最流行的 Python 关系数据库工具包。它提供两个层次:Core 和 ORM。

您可以使用 pip install sqlalchemy 安装它。

from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:')
print('Engine:', engine)

引擎

两个层次都从引擎开始,该引擎由 create_engine() 创建。它管理连接池,并通过网址了解如何与您的特定数据库通信。

from sqlalchemy import create_engine
engine = create_engine('sqlite:///app.db')
print('Dialect:', engine.dialect.name)

两个层次

Core 是一个 SQL 表达式工具包:您构建的查询与 SQL 高度对应。

ORM 构建在 Core 之上,会将 Python 类映射到表,因此您操作的是对象,而不是行。

# Core: think in tables and SQL expressions
# ORM: think in Python classes and objects
print('Core = SQL toolkit, ORM = object mapping')

Core:定义表

在 Core 中,您可以使用 Table 和 MetaData 对象显式描述表。

from sqlalchemy import MetaData, Table, Column, Integer, String
metadata = MetaData()
users = Table('users', metadata,
    Column('id', Integer, primary_key=True),
    Column('name', String))
print('Table defined:', users.name)

Core:构建查询

Core 使用 Python 表达式(例如 select())构建查询,并将其直接转换为 SQL。

from sqlalchemy import MetaData, Table, Column, Integer, String, select
metadata = MetaData()
users = Table('users', metadata,
    Column('id', Integer, primary_key=True),
    Column('name', String))
stmt = select(users).where(users.c.name == 'Alice')
print(stmt)

ORM:映射类

在 ORM 中,Python 类代表一张表。每个属性都映射到一列。您查询和保存的是对象,而不是原始行。

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str]
print('Mapped class:', User.__tablename__)

何时使用 Core

当您希望精确控制 SQL、执行批量数据处理,或运行复杂的报表查询(此时对象会增加开销)时,Core 很合适。

# Core is great for:
# - bulk inserts/updates
# - complex analytical queries
# - close control over generated SQL
print('Core: control and performance')

何时使用 ORM

ORM 适合典型的应用代码:您可以将业务实体建模为类,获得更改跟踪功能,并减少样板代码。

# ORM is great for:
# - application domain models
# - automatic change tracking
# - relationships between objects
print('ORM: productivity and clarity')

它们共享引擎

由于 ORM 构建在 Core 之上,因此两者使用相同的引擎和连接池。您甚至可以在同一个应用中混合使用它们。

from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:')
# Core uses engine.connect()
# ORM uses a Session bound to the same engine
print('One engine powers both layers')

创建表

使用 ORM 时,Base.metadata.create_all(engine) 会为所有映射类生成 CREATE TABLE 语句。

from sqlalchemy import create_engine
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
print('Tables created')

选择层次

大多数应用默认使用 ORM 处理日常工作,只有在少数需要高性能或高度优化的查询中才切换到 Core。了解两者可以为您提供灵活性。

# Rule of thumb:
# Start with the ORM. Use Core where you need raw power.
print('Default ORM, escape to Core when needed')

快速检查

测试您对这两个层次的理解。

回顾

您已经了解了 SQLAlchemy 的架构。

  • Engine 通过 create_engine() 为所有功能提供支持
  • Core 是用于控制和提升性能的 SQL 表达式工具包
  • ORM 将类映射到表,适合高效编写应用代码
  • 两者共享同一个引擎,也可以混合使用

常见问题解答

「SQLAlchemy Core 与 ORM」课时是免费的吗?

是的 — 「SQLAlchemy Core 与 ORM」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Python Academy 课程的其余内容,请升级到 CoddyKit PRO。 Python Academy 课程共包含 4 节课。

「SQLAlchemy Core 与 ORM」这节课中我会学到什么?

理解这两个层次 你通过在浏览器中直接运行的动手代码来练习 Python Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Python Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Python Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「SQLAlchemy Core 与 ORM」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Python Academy 课中编写并运行代码吗?

能。每节 Python Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. SQLAlchemy Core 与 ORM
  2. 定义模型
  3. 使用会话查询
  4. 关系与连接
← 返回 Python Academy