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