Feature: Erstellung der Datenbank und Füllung mit Daten
This commit is contained in:
+66
-11
@@ -1,20 +1,75 @@
|
||||
import datetime
|
||||
|
||||
from fastapi import FastAPI
|
||||
from sqlmodel import Session, SQLModel, create_engine, select
|
||||
from contextlib import asynccontextmanager
|
||||
|
||||
from api.models import Car, FuelItem
|
||||
|
||||
app = FastAPI()
|
||||
sqlite_file_name = "database.db"
|
||||
sqlite_url = f"sqlite:///{sqlite_file_name}"
|
||||
|
||||
connect_args = {
|
||||
"check_same_thread": False
|
||||
}
|
||||
engine = create_engine(sqlite_url, echo=True, connect_args=connect_args)
|
||||
|
||||
|
||||
car = Car(id_string="Auto 1")
|
||||
fill_item = FuelItem(
|
||||
car=car,
|
||||
date=datetime.date.today(),
|
||||
odometer_reading=101005,
|
||||
fuel_fill=52.26
|
||||
)
|
||||
def create_db_and_tables():
|
||||
SQLModel.metadata.create_all(engine)
|
||||
|
||||
@app.get("/")
|
||||
async def root():
|
||||
return fill_item
|
||||
|
||||
@asynccontextmanager
|
||||
async def lifespan(app: FastAPI):
|
||||
# startup
|
||||
create_db_and_tables()
|
||||
car = Car(id_string="Auto 1")
|
||||
with Session(engine) as session:
|
||||
session.add(car)
|
||||
session.commit()
|
||||
session.refresh(car)
|
||||
fill_item = FuelItem(
|
||||
car_id=car.id,
|
||||
date=datetime.date.today(),
|
||||
odometer_reading=101005,
|
||||
fuel_fill=52.26
|
||||
)
|
||||
session.add(fill_item)
|
||||
session.commit()
|
||||
session.refresh(fill_item)
|
||||
yield
|
||||
|
||||
|
||||
app = FastAPI(lifespan=lifespan)
|
||||
|
||||
|
||||
@app.post("/cars/")
|
||||
def create_cars(car: Car):
|
||||
with Session(engine) as session:
|
||||
session.add(car)
|
||||
session.commit()
|
||||
session.refresh(car)
|
||||
return car
|
||||
|
||||
|
||||
@app.get("/cars/")
|
||||
def read_cars():
|
||||
with Session(engine) as session:
|
||||
cars = session.exec(select(Car)).all()
|
||||
return cars
|
||||
|
||||
|
||||
@app.post("/fill_items/")
|
||||
def create_cars(fill_item: FuelItem):
|
||||
with Session(engine) as session:
|
||||
session.add(fill_item)
|
||||
session.commit()
|
||||
session.refresh(fill_item)
|
||||
return fill_item
|
||||
|
||||
|
||||
@app.get("/fill_items/")
|
||||
def read_cars():
|
||||
with Session(engine) as session:
|
||||
fill_items = session.exec(select(FuelItem)).all()
|
||||
return fill_items
|
||||
|
||||
+10
-8
@@ -1,14 +1,16 @@
|
||||
import datetime
|
||||
|
||||
from pydantic import BaseModel, EmailStr
|
||||
from sqlmodel import Field, SQLModel
|
||||
|
||||
|
||||
class Car(BaseModel):
|
||||
id_string: str
|
||||
class Car(SQLModel, table=True):
|
||||
id: int | None = Field(default=None, primary_key=True)
|
||||
id_string: str = Field(nullable=False, index=True)
|
||||
|
||||
|
||||
class FuelItem(BaseModel):
|
||||
car: Car
|
||||
date: datetime.date
|
||||
odometer_reading: float
|
||||
fuel_fill: float
|
||||
class FuelItem(SQLModel, table=True):
|
||||
id: int | None = Field(default=None, primary_key=True)
|
||||
car_id: int | None = Field(default=None, foreign_key="car.id")
|
||||
date: datetime.date = Field(nullable=False, index=True)
|
||||
odometer_reading: float = Field(nullable=False)
|
||||
fuel_fill: float = Field(nullable=False)
|
||||
|
||||
Reference in New Issue
Block a user