FastAPI, column computers.id does not exist

Viewed 20

Here is the code of my main.py in FastAPI:

from typing import List, Union
import datetime
import databases
import sqlalchemy
from fastapi import FastAPI
from pydantic import BaseModel


DATABASE_URL = "postgresql://username:password@localhost/collector"

database = databases.Database(DATABASE_URL)

metadata = sqlalchemy.MetaData()

computers = sqlalchemy.Table(
    "computers",
    metadata,
    sqlalchemy.Column("id", sqlalchemy.Integer, primary_key=True, index=True),
    sqlalchemy.Column("computername", sqlalchemy.String),
    sqlalchemy.Column("computerip", sqlalchemy.String),
    sqlalchemy.Column("computerexternalip", sqlalchemy.String),
    sqlalchemy.Column("time", sqlalchemy.DateTime),
)


engine = sqlalchemy.create_engine(
    DATABASE_URL
)
metadata.create_all(engine)



class ComputerBase(BaseModel):
    computername: str
    computerip: str
    computerexternalip: str
    time: str = datetime.datetime


class ComputerIn(ComputerBase):
    pass

class Computer(ComputerBase):
    id: int
    class Config:
        orm_mode = True

app = FastAPI()


@app.on_event("startup")
async def startup():
    await database.connect()


@app.on_event("shutdown")
async def shutdown():
    await database.disconnect()


@app.get("/computers/", response_model=List[Computer])
async def read_computers():
    query = computers.select()
    print(query)
    return await database.fetch_all(query)


@app.post("/computers/", response_model=Computer)
async def create_computer(computer: ComputerIn):
    current_time = datetime.datetime.utcnow
    query = computers.insert().values(computername=computer.computername, computerip=computer.computerip, computerexternalip=computer.computerexternalip, time=current_time)
    last_record_id = await database.execute(query)
    return {**computer.dict(), "id": last_record_id}

When I go on https://localhost:8000/computers, I get this error:

asyncpg.exceptions.UndefinedColumnError: column computers.id does not exist

Which I don't understand since I declare a table names "computers" with an id column at the begining of my code.

Any idea ?

Thank you

0 Answers
Related