Joh*_*aly 8 python postgresql sqlalchemy fastapi sqlmodel
在 FastAPI 应用程序中创建模型时,我正在努力获取创建 UUID 字段的语法。我正在使用SQLModel。
基本上,我的 models.py 文件如下所示:
from datetime import datetime
from typing import Optional
import uuid
from sqlalchemy import Column, DateTime
from sqlalchemy.dialects import postgresql as psql
from sqlmodel import SQLModel, Field
class ModelBase(SQLModel):
"""
Base class for database models.
"""
id: Optional[int] = Field(default=None, primary_key=True)
created_at: datetime = Field(sa_column=Column(DateTime(timezone=True), default=datetime.utcnow))
updated_at: datetime = Field(sa_column=Column(DateTime(timezone=True),
onupdate=datetime.utcnow, default=datetime.utcnow))
class UUIDModelBase(ModelBase, table=True):
"""
Base class for UUID-based models.
"""
uuid: uuid.UUID = Field(sa_column=Column(psql.UUID(as_uuid=True)), default=uuid.uuid4)
Run Code Online (Sandbox Code Playgroud)
上述错误与
AttributeError: 'FieldInfo' object has no attribute 'UUID'
Run Code Online (Sandbox Code Playgroud)
我也尝试过
AttributeError: 'FieldInfo' object has no attribute 'UUID'
Run Code Online (Sandbox Code Playgroud)
还
id: uuid.UUID = Column(psql.UUID(as_uuid=True), default=uuid.uuid4)
TypeError: Boolean value of this clause is not defined
Run Code Online (Sandbox Code Playgroud)
和
uuid: uuid.UUID = Column(psql.UUID(as_uuid=True), default=uuid.uuid4)
AttributeError: Neither 'Column' object nor 'Comparator' object has an attribute 'UUID'
Run Code Online (Sandbox Code Playgroud)
你明白了。这些错误对我没有帮助,我只需要正确的语法。
在本例中,我实际上并不希望使用 UUID 作为主键。正如您从导入中可以看出的那样,我正在使用 postgreSQL。该数据库基于 postgres:12 docker 镜像。
小智 16
解释器可能使用UUID
您的实际字段uuid
而不是导入的包。因此,您可以按如下方式更改代码。
import uuid as uuid_pkg
from sqlalchemy import Field
from sqlmodel import Field
class UUIDModelBase(ModelBase):
"""
Base class for UUID-based models.
"""
uuid: uuid_pkg.UUID = Field(
default_factory=uuid_pkg.uuid4,
primary_key=True,
index=True,
nullable=False,
)
Run Code Online (Sandbox Code Playgroud)
参考: https: //github.com/tiangolo/sqlmodel/issues/140
归档时间: |
|
查看次数: |
18964 次 |
最近记录: |