'Pydantic database relations one to many

So I have an API that is supposed to return a plot with coordinates(Plot and Coordinates being objects) When I try to do a get of all the plots I wanted something like this :

[
  {
    "id": 1,
    "description": "test",
    "createdTime": "date",
    "coords": [
      {
        "long": 0,
        "lat": 0
      },
      {
        "long": 1,
        "lat": 2
      },
      {
        "long": 2,
        "lat": 2
      },
    ]
  }
]

This is what I get: json result

The coords comes out as null even tho it exists in the database

I am doing something wrong? I think the error is in the find_all_plots() function in app.py, but I don't know how to fix it

database.py:

plots = sqlalchemy.Table(
    "plots",
    metadata,
    sqlalchemy.Column("id"                      ,sqlalchemy.Integer, primary_key=True, autoincrement=True),
    sqlalchemy.Column("description"             ,sqlalchemy.String),
    sqlalchemy.Column("createdTime"             ,sqlalchemy.String),

    )

coordinatesPlot = sqlalchemy.Table(
    "coordinatesPlot",
    metadata,
    sqlalchemy.Column("id"                      ,sqlalchemy.Integer, primary_key=True, autoincrement=True),
    sqlalchemy.Column("plot_id"                 ,sqlalchemy.Integer, sqlalchemy.ForeignKey('plots.id')),
    sqlalchemy.Column("lat"                     ,sqlalchemy.Float),
    sqlalchemy.Column("long"                    ,sqlalchemy.Float),
)

model.py

class Coordinates(BaseModel):
    long                :float
    lat                 :float
    class Config:
        orm_mode = True



class Plot(BaseModel):
    id                  :int
    farm_id             :int
    description         :str
    createdTime         :str
    coords              :List[Coordinates]
    class Config:
        orm_mode = True

Plot.update_forward_refs()

app.py

#Coordinates
@app.get("/coordinates", response_model=List[models.Coordinates], tags=["Coordinates"])
async def find_all_coordinates():
    query = coordinatesPlot.select()
    return await database.fetch_all(query)


#Plots
@app.get("/plots", response_model=List[models.Plot], tags=["Plots"])
async def find_all_plots():
    query = plots.select()
    return await database.fetch_all(query)

@app.post("/plots", response_model=models.PlotCreate, tags=["Plots"])
async def register_plot(plot: models.PlotCreate):

    queryfarm = farms.select().where(farms.c.id == plot.farm_id)
    result = await database.fetch_one(queryfarm)

    if result is None: 
        raise HTTPException(status_code=404, detail="Farm not found")


    pDate =str(datetime.now())
    query = plots.insert().values(
        farm_id   = plot.farm_id,
        description = plot.description,
        createdTime  = pDate,
    ) 

    plotID = await database.execute(query)

    for coord in plot.coords:
        queryCoordinatesPlot = coordinatesPlot.insert().values(
            plot_id = plotID,
            lat = coord.lat,
            long = coord.long
        )
        await database.execute(queryCoordinatesPlot)


    return {
        **plot.dict(),
        "createdTime":pDate,
        "status": "1"
    }


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source