from sqlalchemy import create_engine, Column, Table, ForeignKey, Index, UniqueConstraint, MetaData, SmallInteger, Integer, String, Date, DateTime, Float, Boolean, Text, Numeric, 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() # 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) start = Column(DateTime, nullable=False) end = Column(DateTime, nullable=False) # Beziehungen zu anderen Tabellen waypoints = relationship('Waypoint', backref='track', lazy=True) driver = relationship('Driver', back_populates='tracks') vehicle = relationship('Vehicle', back_populates='tracks') 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, autoincrement=True) name = Column(String, nullable=False) # Beziehung zu Track, zurück über 'tracks' auf Track-Seite tracks = relationship("Track", back_populates='driver') class Vehicle(Base): __tablename__ = 'vehicle' id = Column(Integer, primary_key=True, autoincrement=True) name = Column(String, nullable=False) # Beziehung zu Track, zurück über 'tracks' auf Track-Seite tracks = relationship('Track', back_populates='vehicle')