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
相关产品推荐
相关产品推荐

