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 反馈 — 无需本地设置。