Feature: Erstellung der Datenbank und Füllung mit Daten
This commit is contained in:
@@ -1,2 +1,3 @@
|
|||||||
.venv
|
.venv
|
||||||
/.idea/
|
/.idea/
|
||||||
|
/database.db
|
||||||
|
|||||||
+61
-6
@@ -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)
|
||||||
|
|
||||||
|
|
||||||
car = Car(id_string="Auto 1")
|
def create_db_and_tables():
|
||||||
fill_item = FuelItem(
|
SQLModel.metadata.create_all(engine)
|
||||||
car=car,
|
|
||||||
|
|
||||||
|
@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(),
|
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
@@ -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)
|
||||||
|
|||||||
@@ -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.*
|
||||||
|
|||||||
Reference in New Issue
Block a user