In FastAPI / sqlalchemy : .where function does not recognize a column

Viewed 24

In my get path, I use the parameter "q" to perform a search in the database. But when I test the path against this parameter I get the following error:

AttributeError: 'Table' object has no attribute 'computername'

Here is my code:

import databases
import sqlalchemy
from fastapi import FastAPI, Request
from pydantic import BaseModel
from fastapi.templating import Jinja2Templates
from fastapi.responses import HTMLResponse

# SQLAlchemy specific code, as with any other app
DATABASE_URL = "postgresql://username:password@localhost/db_name"
database = databases.Database(DATABASE_URL)
metadata = sqlalchemy.MetaData()
computers = sqlalchemy.Table(
    "computersTable",
    metadata,
    sqlalchemy.Column("id", sqlalchemy.Integer, primary_key=True),
    sqlalchemy.Column("computername", sqlalchemy.String)
)
engine = sqlalchemy.create_engine(
    DATABASE_URL
)
metadata.create_all(engine)
class ComputerIn(BaseModel):
    computername: str

class Computer(BaseModel):
    id: int
    computername: str

app = FastAPI()


templates = Jinja2Templates(directory="templates")

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


@app.get("/computers/", response_class=HTMLResponse)
async def read_computers(request: Request, q: str):
    query = computers.select().where(computers.computername == 'jack')
    results = await database.fetch_all(query)
    return templates.TemplateResponse("computers.html", {"request": request, "results": results})


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

Thank you

0 Answers
Related