如何通过 pydantic 模式重命名来自数据库的响应 - FastAPI

Posted

技术标签:

【中文标题】如何通过 pydantic 模式重命名来自数据库的响应 - FastAPI【英文标题】:How to rename keys in response from database by pydantic schema - FastAPI 【发布时间】:2021-12-24 09:31:03 【问题描述】:

我在 models.py 中有来自数据库的模型:

class Something(Base):
    __tablename__ = "something"

    DATE = Column(Date, primary_key=True, index=True )  
    a = Column(String, primary_key=True, index=True)
    b = Column(Integer, primary_key=True, index=True)
    c = Column(Float, index=True) 
    d = Column(Integer, index=True)
    e = Column(Integer, index=True)
    f = Column(Float, index=True)
    g = Column(Float, index=True)  
    h = Column(Integer, index=True)  

schema.py 中的 pydantic 模型:

class Something(BaseModel):
    DATE: date
    a: str
    b: int
    c: float = None
    d: int = None
    e: int = None
    f: float = None
    g: float = None
    h: int = None

    class Config:
        orm_mode = True

我通过 ORM 从数据库中获取数据,并在 app.get() 中声明响应模型 = List[schema.Something],但我想从数据库中更改愚蠢的名称 -> a、b、c、d - > 更漂亮的名字。 是否有一些解决方案,例如在 NestJS 中映射名称?

【问题讨论】:

【参考方案1】:

尝试使用别名,这是allow_population_by_field_name 允许的选项,例如:

class Person(BaseModel):
    first_name: str = Field(..., alias='first')
    last_name: str = Field(..., alias='second')

    class Config:
        allow_population_by_field_name = True


p = Person(**'first': 'John', 'second': 'White')
print(p.__dict__)

# 'first_name': 'John', 'last_name': 'White'

【讨论】:

以上是关于如何通过 pydantic 模式重命名来自数据库的响应 - FastAPI的主要内容,如果未能解决你的问题,请参考以下文章

如何重命名故事板并保留来自其他故事板的链接

如何在 MySQL 中重命名模式

如何将 MySQL JOOQ 重命名表查询范围限定为同一个数据库?

python 通过EXIF重命名文件名。来自http://code.activestate.com/recipes/576646/

如何在 WinForms 中禁用 TreeView 的节点重命名?

如何对wps流程图进行重命名,如何对wps流程图进行重命名,wps进入修订模式,wps怎么在尾部加公式标号英文论文格式要求及字体大小