SQLAlchemy教程:第一个例子-2.ORM基类、表模型定义 作者:马育民 • 2026-08-16 17:20 • 阅读:10003 # 介绍 ORM是将类与表一一对应,也就是用面向对象的思想去操作表,所以要定义基类、表模型类 # ORM基类 如果表中有通用的字段,就放到基类中,没有就定义为空类 # 实现基类 ### 导包 ``` from sqlalchemy import String, Integer from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column ``` ### 基类 ``` class Base(DeclarativeBase): pass ``` # 表模型类 表模型类,就是与 表 一一对应的类,该类继承 ORM基类 ##### 组成 - `__tablename__` 赋值为表名 - 属性要与表中字段一一对应,类型是 `Mapped[]`,默认值是 `mapped_column()` # mapped_column()常用形参 ``` Mapped[int] = mapped_column( name, type, primary_key=True, autoincrement=True, index=True, nullable=False, unique=False, comment="主键ID" ) ``` ### 解释 - name:表中的字段名,不传值取表模型类的属性名 - type:表中的类型,详见下表 - primary_key:`bool` 类型,默认 `False`。是否作为主键。 - autoincrement:`bool | "auto"`。默认 `"auto"`,MySQL **整数主键开启 `AUTO_INCREMENT` 自增**。 - nullable:`bool`,默认 `True`。是否允许 `NULL`。`nullable=False` 表示 `NOT NULL`。 - unique:`bool`,默认 `False`。该字段建立 **唯一约束**,字段值不能重复。 - index:`bool`,默认 `False`。是否给该字段创建普通索引 - comment:字符串类型,字段注释,MySQL 建表生成 COMMENT。 type取值: | Python类型注解 | SQLAlchemy类型 | MySQL实际类型 | 说明 | |---|---|---|---| | `Mapped[int]` | `Integer()` | int | 普通整数,约 ±21亿 | | `Mapped[int]` | `BigInteger()` | bigint | 大整数,雪花id用 | | `Mapped[str]` | `String(64)` | varchar(64) | 短字符串,**必须写长度** | | `Mapped[str]` | `Text()` | longtext | 大文本,不需要长度 | | `Mapped[float]` | `Float()` | float | 浮点数,精度不高,金额不要用 | | `Mapped[Decimal]` | `Numeric(10,2)` | decimal(10,2) | 金额,精确小数;总长度10,小数位2 | | `Mapped[bool]` | `Boolean()` | tinyint(1) | mysql没有bool,底层tinyint 0/1 | | `Mapped[date]` | `Date()` | date | 日期 `yyyy‑MM‑dd` | | `Mapped[datetime]` | `DateTime()` | datetime | 日期时间 | | `Mapped[bytes]` | `LargeBinary()` | longblob | 二进制字节 | # 实现:定义表模型类 ``` class User(Base): __tablename__ = "user" id: Mapped[int] = mapped_column(Integer(),primary_key=True,autoincrement=True,comment="主键") username: Mapped[str] = mapped_column(String(50),comment="") password: Mapped[int] = mapped_column(String(50),comment="密码") ``` 原文出处:/show_1GW3sCi52YhG.html