from sqlalchemy import Column, Date, DateTime, Float, ForeignKey, Integer, String from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.pool import NullPool from sqlalchemy.orm import relationship Base = declarative_base() def getBase(): # i dont know if i ever need this but if i might here it is return Base def createTables(engine): Base.metadata.create_all(engine) engine.add(Driver(name="default")) engine.add(Vehicle(name="default")) engine.commit() class Track(Base): __tablename__ = 'track' id = Column(Integer, primary_key=True, autoincrement=True) trackName = Column(String(200), nullable=True) vehicle = Column(Integer, ForeignKey('vehicle.id'), nullable=False, default=1) driver = 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) waypoints = relationship('Waypoint', backref='track', lazy=True) driver = relationship('Driver', backref='track') vehicle = relationship('Vehicle', backref='track') pass 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 = Column(Integer, ForeignKey('track.id'), nullable=False) pass class Driver(Base): __tablename__ = 'driver' id = Column(Integer, primary_key=True, autoincrement=True) name = Column(String, nullable=False) track = relationship("Track", back_populates='driver') pass class Vehicle(Base): __tablename__ = 'vehicle' id = Column(Integer, primary_key=True, autoincrement=True) name = Column(String, nullable=False) track = relationship('Track', back_populates='vehicle') pass