Feature: Erstellung der Datenbank und Füllung mit Daten

This commit is contained in:
2025-10-29 00:07:49 +01:00
parent 3c147149ab
commit d61a4a6186
4 changed files with 78 additions and 19 deletions
+1
View File
@@ -1,2 +1,3 @@
.venv .venv
/.idea/ /.idea/
/database.db
+59 -4
View File
@@ -1,20 +1,75 @@
import datetime import datetime
from fastapi import FastAPI from fastapi import FastAPI
from sqlmodel import Session, SQLModel, create_engine, select
from contextlib import asynccontextmanager
from api.models import Car, FuelItem 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)
def create_db_and_tables():
SQLModel.metadata.create_all(engine)
@asynccontextmanager
async def lifespan(app: FastAPI):
# startup
create_db_and_tables()
car = Car(id_string="Auto 1") car = Car(id_string="Auto 1")
with Session(engine) as session:
session.add(car)
session.commit()
session.refresh(car)
fill_item = FuelItem( fill_item = FuelItem(
car=car, car_id=car.id,
date=datetime.date.today(), date=datetime.date.today(),
odometer_reading=101005, odometer_reading=101005,
fuel_fill=52.26 fuel_fill=52.26
) )
session.add(fill_item)
session.commit()
session.refresh(fill_item)
yield
@app.get("/")
async def root(): 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 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
View File
@@ -1,14 +1,16 @@
import datetime import datetime
from pydantic import BaseModel, EmailStr from sqlmodel import Field, SQLModel
class Car(BaseModel): class Car(SQLModel, table=True):
id_string: str id: int | None = Field(default=None, primary_key=True)
id_string: str = Field(nullable=False, index=True)
class FuelItem(BaseModel): class FuelItem(SQLModel, table=True):
car: Car id: int | None = Field(default=None, primary_key=True)
date: datetime.date car_id: int | None = Field(default=None, foreign_key="car.id")
odometer_reading: float date: datetime.date = Field(nullable=False, index=True)
fuel_fill: float odometer_reading: float = Field(nullable=False)
fuel_fill: float = Field(nullable=False)
+1
View File
@@ -2,6 +2,7 @@ annotated-doc==0.0.*
annotated-types==0.7.* annotated-types==0.7.*
anyio==4.11.* anyio==4.11.*
fastapi==0.120.* fastapi==0.120.*
sqlmodel==0.0.*
uvicorn==0.38.0 uvicorn==0.38.0
idna==3.11 idna==3.11
pydantic==2.12.* pydantic==2.12.*