models.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. """Database models"""
  2. from sqlalchemy import MetaData, Column, ForeignKey, Integer, String, \
  3. SmallInteger, DateTime, BigInteger
  4. from sqlalchemy.orm import relationship, backref
  5. from sqlalchemy.ext.declarative import declarative_base
  6. Base = declarative_base()
  7. class PlayerResidency(Base):
  8. """Model for player residency"""
  9. __tablename__ = 'player_residency'
  10. player_id = Column(BigInteger, ForeignKey('player.id'), primary_key=True)
  11. region_id = Column(Integer, ForeignKey('region.id'), primary_key=True)
  12. from_date_time = Column(DateTime)
  13. until_date_time = Column(DateTime)
  14. class PlayerLocation(Base):
  15. """Model for player location"""
  16. __tablename__ = 'player_location'
  17. player_id = Column(BigInteger, ForeignKey('player.id'), primary_key=True)
  18. region_id = Column(Integer, ForeignKey('region.id'), primary_key=True)
  19. from_date_time = Column(DateTime)
  20. until_date_time = Column(DateTime)
  21. class StateRegion(Base):
  22. """Model for state region"""
  23. __tablename__ = 'state_region'
  24. state_id = Column(Integer, ForeignKey('state.id'), primary_key=True)
  25. region_id = Column(Integer, ForeignKey('region.id'), primary_key=True)
  26. from_date_time = Column(DateTime)
  27. until_date_time = Column(DateTime)
  28. class State(Base):
  29. """Model for state"""
  30. __tablename__ = 'state'
  31. id = Column(Integer, primary_key=True)
  32. name = Column(String)
  33. regions = relationship(
  34. 'Region',
  35. secondary='state_region',
  36. backref=backref('states', lazy='dynamic'),
  37. lazy='dynamic'
  38. )
  39. capital_id = Column(Integer, ForeignKey('region.id'))
  40. capital = relationship(
  41. 'Region',
  42. backref=backref('state_capital', lazy='dynamic')
  43. )
  44. class Region(Base):
  45. """Model for region"""
  46. __tablename__ = 'region'
  47. id = Column(Integer, primary_key=True)
  48. name = Column(String)
  49. class Player(Base):
  50. """Model for player"""
  51. __tablename__ = 'player'
  52. id = Column(BigInteger, primary_key=True)
  53. name = Column(String)
  54. nation = Column(String)
  55. residencies = relationship('Region', secondary='player_residency')
  56. locations = relationship('Region', secondary='player_location')