You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLAlchemy 2中能否实现自动生成UUID类型主键?

SQLAlchemy 2 内置UUID作为自动生成主键的正确配置方法

你遇到的错误核心是:Mapped[]注解要求传入Python原生类型,而不是SQLAlchemy定义的sa.Uuid类型。Python标准库的uuid.UUID才是正确的类型注解选择。

以下是正确的实现代码:

import sqlalchemy as sa
import sqlalchemy.orm as so
import uuid  # 导入Python标准库的uuid模块

from project import db


class User(db.Model):
    id: so.Mapped[uuid.UUID] = so.mapped_column(
        sa.Uuid, primary_key=True, default=uuid.uuid4
    )
    username: so.Mapped[str] = so.mapped_column(sa.String(64), index=True, unique=True)

关键说明:

  • Mapped[uuid.UUID]:用Python原生的UUID类型做类型注解,符合SQLAlchemy 2的ORM类型规范
  • sa.Uuid:指定数据库层面的字段类型,对应SQLAlchemy内置的UUID类型
  • default=uuid.uuid4:设置默认值为Python生成的UUID,创建新User对象时会自动生成主键值,无需手动赋值

如果希望由数据库层面自动生成UUID(比如PostgreSQL的原生UUID生成函数),可以修改default参数为数据库原生函数:

# PostgreSQL示例,需先执行 CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
id: so.Mapped[uuid.UUID] = so.mapped_column(
    sa.Uuid, primary_key=True, server_default=sa.text("uuid_generate_v4()")
)

内容的提问来源于stack exchange,提问作者SSteve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 21:53:15