| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 | """Database models"""from sqlalchemy import Column, ForeignKey, Integer, String, \    DateTime, BigInteger, Datefrom sqlalchemy.orm import relationship, backreffrom sqlalchemy.ext.declarative import declarative_baseBase = declarative_base()class PlayerResidency(Base):    """Model for player residency"""    __tablename__ = 'player_residency'    player_id = Column(BigInteger, ForeignKey('player.id'), primary_key=True)    region_id = Column(Integer, ForeignKey('region.id'), primary_key=True)    from_date_time = Column(DateTime, primary_key=True)    until_date_time = Column(DateTime)class PlayerLocation(Base):    """Model for player location"""    __tablename__ = 'player_location'    player_id = Column(BigInteger, ForeignKey('player.id'), primary_key=True)    region_id = Column(Integer, ForeignKey('region.id'), primary_key=True)    from_date_time = Column(DateTime, primary_key=True)    until_date_time = Column(DateTime)class StateRegion(Base):    """Model for state region"""    __tablename__ = 'state_region'    state_id = Column(Integer, ForeignKey('state.id'), primary_key=True)    region_id = Column(Integer, ForeignKey('region.id'), primary_key=True)    from_date_time = Column(DateTime, primary_key=True)    until_date_time = Column(DateTime)class StateWorkPermit(Base):    """Model for state work permit"""    __tablename__ = 'state_work_permit'    state_id = Column(Integer, ForeignKey('state.id'), primary_key=True)    player_id = Column(BigInteger, ForeignKey('player.id'), primary_key=True)    from_date_time = Column(DateTime, primary_key=True)    until_date_time = Column(DateTime)class State(Base):    """Model for state"""    __tablename__ = 'state'    id = Column(Integer, primary_key=True)    name = Column(String)    regions = relationship(        'Region',        secondary='state_region',        backref=backref('states', lazy='dynamic'),        lazy='dynamic'    )    capital_id = Column(Integer, ForeignKey('region.id'))    capital = relationship(        'Region',        backref=backref('state_capital', lazy='dynamic')    )class Region(Base):    """Model for region"""    __tablename__ = 'region'    id = Column(Integer, primary_key=True)    name = Column(String)class Player(Base):    """Model for player"""    __tablename__ = 'player'    id = Column(BigInteger, primary_key=True)    name = Column(String)    nation = Column(String)    registration_date = Column(Date)    residencies = relationship(        'Region',        secondary='player_residency',        backref=backref('residents', lazy='dynamic'),        lazy='dynamic',        order_by='desc(PlayerResidency.from_date_time)'    )    locations = relationship(        'Region',        secondary='player_location',        backref=backref('citizens', lazy='dynamic'),        lazy='dynamic',        order_by='desc(PlayerLocation.from_date_time)'    )    state_work_permits = relationship(        'State',        secondary='state_work_permit',        lazy='dynamic',        order_by='desc(StateWorkPermit.from_date_time)'    )
 |