'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 |
|---|
