from sqlalchemy import create_engine, Column, ForeignKey, Integer, String, Date, Float, DateTime from sqlalchemy.orm import relationship, sessionmaker from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.pool import NullPool from sqlalchemy.exc import OperationalError Base = declarative_base() # TODO: build license plate into car api construct and rebuild api to fit new data # Funktion zur Herstellung einer Verbindung zur Datenbank def db_connect(): try: engine = create_engine("postgresql://example:example@localhost/geotrack", poolclass=NullPool) # Überprüfe die Verbindung with engine.connect() as connection: print("Verbindung zur Datenbank erfolgreich!") return engine except OperationalError as e: print(f"Fehler bei der Verbindung zur Datenbank: {e}") return None # Funktion zur Erstellung der Tabellen def create_table(engine): try: if engine is not None: Base.metadata.create_all(engine) print("Tabellen wurden erfolgreich erstellt!") else: print("Keine Verbindung zur Datenbank verfügbar.") except Exception as e: print(f"Fehler bei der Tabellenerstellung: {e}") class Track(Base): __tablename__ = 'track' id = Column(Integer, primary_key=True, autoincrement=True) trackName = Column(String(200), nullable=True) vehicle_id = Column(Integer, ForeignKey('vehicle.id'), nullable=False, default=1) driver_id = Column(Integer, ForeignKey('driver.id'), nullable=False, default=1) date = Column(Date, nullable=True) distance = Column(Float, nullable=False, default=0) speed = Column(Float, nullable=False, default=0) driver = relationship("Driver", backref="vehicle_tracks") # 'vehicle_tracks' als backref vehicle = relationship("Vehicle", backref="driver_tracks") # 'driver_tracks' als backref waypoints = relationship('Waypoint', backref='track', lazy=True) class Waypoint(Base): __tablename__ = 'waypoint' id = Column(Integer, primary_key=True, autoincrement=True) lat = Column(Float, nullable=False) lon = Column(Float, nullable=False) ele = Column(Float, nullable=False) speed = Column(Float, nullable=True) time = Column(DateTime, nullable=True) track_id = Column(Integer, ForeignKey('track.id'), nullable=False) class Driver(Base): __tablename__ = 'driver' id = Column(Integer, primary_key=True) name = Column(String, nullable=False) tracks = relationship("Track", back_populates="driver") # Beziehung von Track -> Driver class Vehicle(Base): __tablename__ = 'vehicle' id = Column(Integer, primary_key=True) name = Column(String, nullable=False) tracks = relationship("Track", back_populates="vehicle") # Beziehung von Track -> Vehicle