FastAPI: DateTime server response different of FastAPI "response"

Viewed 18

When I insert a new row on my "computer" table with a POST request, I see that the value for the "creation_time" column differs, i.e. the correct timezone ("America/New_York", defined in the code, see below) appears on the "server response" whereas an incorrect timezone (I guess GMT+0) appears on the "FastAPI response": enter image description here

Here is my code:

import databases
import sqlalchemy
from fastapi import FastAPI
from pydantic import BaseModel
from datetime import datetime
import pytz


DATABASE_URL = "postgresql://username:password@localhost/some_db"
database = databases.Database(DATABASE_URL)
metadata = sqlalchemy.MetaData()
computers = sqlalchemy.Table(
    "computers32",
    metadata,
    sqlalchemy.Column("id", sqlalchemy.Integer, primary_key=True),
    sqlalchemy.Column("creation_time", sqlalchemy.DateTime(timezone=True), default=datetime.utcnow().replace(tzinfo=pytz.UTC).astimezone(pytz.timezone("America/New_York"))) # !! Making DateTime objects aware of timezone
)
engine = sqlalchemy.create_engine(
    DATABASE_URL
)


metadata.create_all(engine)

class ComputerIn(BaseModel):
    computername: str
    computerip: str
    computerexternalip: str
    creation_time: datetime = datetime.utcnow().replace(tzinfo=pytz.UTC).astimezone(pytz.timezone("America/New_York"))



class Computer(BaseModel):
    id: int
    computername: str
    computerip: str
    computerexternalip: str
    creation_time: datetime


app = FastAPI()



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



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