在 SQLModel 中,如果你想将主键定义为 UUID 类型,你可以使用 Field
函数与 sqlalchemy
的 Column
函数来实现。首先,你需要从 uuid
模块导入 UUID
,以及从 sqlalchemy
导入 Column
和其他必要的组件。
以下是一个定义 UUID 作为主键的 SQLModel 模型示例:
python
from sqlmodel import SQLModel, Field
from sqlalchemy import Column, String, UUID
import uuid
class MyModel(SQLModel, table=True):
# 使用 UUID 作为主键
id: UUID = Field(default=lambda: uuid.uuid4(), primary_key=True)
some_field: str = Field(sa_column=Column(String))
# 如果需要在没有默认值的情况下创建一个 UUID 主键的模型
class MyOtherModel(SQLModel, table=True):
id: UUID = Field(primary_key=True)
some_field: str = Field(sa_column=Column(String))
def __init__(self, id: uuid.UUID = None, **data):
if id is None:
self.id = uuid.uuid4()
super().__init__(id=id, **data)
在这个例子中:
MyModel
类定义了一个使用 UUID 作为主键的模型。Field
函数的default
参数设置为lambda: uuid.uuid4()
,这意味着每次创建新实例时,如果没有提供id
,将自动生成一个新的 UUID。MyOtherModel
类展示了如何在没有默认生成函数的情况下定义一个 UUID 主键。在这个模型中,你需要在创建实例时手动提供一个 UUID,或者在构造函数中设置一个 UUID。
请注意,SQLModel 建立在 Pydantic 模型之上,Pydantic 要求模型的字段必须有默认值或者通过构造函数显式设置。这就是为什么 MyOtherModel
中需要重写构造函数来处理 UUID 的初始化。
确保你的数据库支持 UUID 类型,并且 SQLAlchemy 的 dialect 正确配置以使用 UUID。大多数现代数据库(如 PostgreSQL)都支持 UUID 类型。
要使用这些模型,你需要创建一个 SQLAlchemy 引擎并连接到数据库,然后使用 SQLModel 的元数据来创建表:
python
from sqlmodel import SQLModel, create_engine
SQLModel.metadata.create_all(create_engine('sqlite:///example.db'))
这将创建一个 SQLite 数据库(或你选择的其他数据库类型),并根据模型定义创建相应的表。