【发布时间】:2021-11-21 09:03:30
【问题描述】:
我想要一条关于处理在 SQLAlchemy 中执行的连接操作的结果并使用 Pydantic(在 FastAPI 中)进行序列化的建议。
如果我没记错的话,两个表的连接结果会导致 SQLAlchemy 模型的元组列表。这是一个模拟,like_a_join 是我对连接查询结果的理解。
from pydantic import BaseModel
from sqlalchemy import Column, Integer
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class A(BaseModel):
a: int
class Config:
orm_mode = True
class B(BaseModel):
b: int
class Config:
orm_mode = True
class Am(Base):
__tablename__ = "A"
a = Column(Integer, primary_key=True, nullable=False)
class Bm(Base):
__tablename__ = "B"
b = Column(Integer, primary_key=True, nullable=False)
def like_a_join():
return [(Am(a=1), Bm(b=1))]
虽然可以使用 from_orm 将模型对象传递给 Pydantic 以进行简单查询(例如在 FastAPI Postgres cookie 切割器 here 上完成,但这对我来说如何最好地处理连接并不明显/元组大小写。
创建一个类来处理如下的元组有意义吗?
from typing import List
from pydantic import parse_obj_as
from dataclasses import dataclass
@dataclass
class Cm:
a: Am
b: Bm
class C(BaseModel):
a: A
b: B
class Config:
orm_mode = True
def like_a_join_with_class():
return [Cm(a=Am(a=1), b=Bm(b=1))]
print(parse_obj_as(List[C], like_a_join_with_class()))
用字典会更好吗?
def like_a_join_with_dict():
return [{"a": Am(a=1), "b": Bm(b=1)}]
背后的想法是将查询结果包含在 FastAPI 端点中,并自动处理序列化。
提前感谢您的帮助。
【问题讨论】:
标签: python sqlalchemy fastapi pydantic