Python fastapi:将sqlalchemy数据库模型映射到pydantic geojson特性

Python fastapi:将sqlalchemy数据库模型映射到pydantic geojson特性,python,sqlalchemy,geojson,fastapi,pydantic,Python,Sqlalchemy,Geojson,Fastapi,Pydantic,我刚刚开始使用fastapi/sqlalchemy/pydantic,我正在尝试构建一个简单的API端点,以将postgis表中的行作为geojson功能集合返回 这是sqlalchemy模型: class Poi(Base): __tablename__ = 'poi' id = Column(Integer, primary_key=True) name = Column(Text, nullable=False) type_id = Column(Integer) geometry =

我刚刚开始使用fastapi/sqlalchemy/pydantic,我正在尝试构建一个简单的API端点,以将postgis表中的行作为geojson功能集合返回

这是sqlalchemy模型:

class Poi(Base):
__tablename__ = 'poi'

id = Column(Integer, primary_key=True)
name = Column(Text, nullable=False)
type_id = Column(Integer)
geometry = Column(Geometry('POINT', 4326, from_text='ST_GeomFromEWKT'), nullable=False)
使用geojson_pydantic,相关pydantic模型包括:

from geojson_pydantic.features import Feature, FeatureCollection
from geojson_pydantic.geometries import Point
from typing import List

class PoiProperties(BaseModel):
    name: str
    type_id: int

class PoiFeature(Feature):
    id: int
    geometry: Point
    properties: PoiProperties

class PoiCollection(FeatureCollection):
    features: List[PoiFeature]
理想情况下,我希望能够检索并返回数据库记录,如下所示:

def get_pois(db: Session, skip: int = 0, limit: int = 100):
    return db.query(Poi).offset(skip).limit(limit).all()


@app.get("/geojson", response_model=PoiCollection)
def read_geojson(skip: int = 0, limit: int = 100,  db: Session = Depends(get_db)):
    return get_pois(db, skip=skip, limit=limit)
尽管如此,我仍在试图找出如何将db模型中的name和type_id列映射到PoiFeature对象中的PoiProperties

不确定这是否是唯一(或推荐的)方法,但您可以使用
root_验证器
pre=True
更改输入格式,使其与pydantic模型匹配: