Advertisement
serge_rybakov

Untitled

Apr 6th, 2021
537
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.37 KB | None | 0 0
  1. """Database module."""
  2. import json
  3. from datetime import datetime
  4.  
  5. from sqlalchemy import Column, DateTime, Float, ForeignKey, Integer, String
  6. from sqlalchemy.orm import relationship
  7.  
  8. from main import db
  9.  
  10.  
  11. class City(db.Model):
  12.     """City table."""
  13.  
  14.     __tablename__ = "city"
  15.     # __table_args__ = {'extend_existing': True}
  16.     id = Column(Integer(), primary_key=True, autoincrement=True)
  17.     name = Column(String(100), nullable=False)
  18.     country = Column(String(2), nullable=False)
  19.  
  20.  
  21. class Service(db.Model):
  22.     """Weather service table."""
  23.  
  24.     __tablename__ = "service"
  25.     # __table_args__ = {'extend_existing': True}
  26.     id = Column(Integer(), primary_key=True, autoincrement=True)
  27.     name = Column(String(100), nullable=False)
  28.     url = Column(String(250), nullable=False)
  29.  
  30.  
  31. class Weather(db.Model):
  32.     """Weather table."""
  33.  
  34.     __tablename__ = "weather_city_service"
  35.     # __table_args__ = {'extend_existing': True}
  36.     # # __abstract__ = True
  37.     city = Column(Integer, ForeignKey("city.id"), primary_key=True, nullable=False)
  38.     service = Column(Integer, ForeignKey("service.id"), primary_key=True, nullable=False)
  39.     temp = Column(Float(2), nullable=False)
  40.     dt = Column(DateTime(), nullable=False)
  41.     city_rel = relationship("City")
  42.     service_rel = relationship("Service")
  43.  
  44.     def __init__(self, temp: float, city: int, service: int, dt: DateTime = None, id: int = None):
  45.         self.id = id
  46.         self.temp = temp
  47.         self.dt = datetime.fromtimestamp(dt) if dt else datetime.utcnow()
  48.         self.city = city
  49.         self.service = service if isinstance(service, int) else self.__set_service(service)
  50.  
  51.     date_time = property()
  52.  
  53.     @date_time.setter
  54.     def date_time(self, timetuple):
  55.         if isinstance(timetuple, int):
  56.             self.dt = datetime.fromtimestamp(timetuple)
  57.  
  58.     @staticmethod
  59.     def __set_service(name):
  60.         service = Service.query.filter_by(name=name).first()
  61.         return service.id
  62.  
  63.  
  64. if __name__ == "__main__":
  65.     db.drop_all()
  66.     db.create_all()
  67.  
  68.     data_to_model = {"Service": Service, "City": City}
  69.  
  70.     with open("inits.json", "r", encoding="utf-8") as f:
  71.         file = json.load(f)
  72.         entities = [data_to_model[dic["model"]](**dic["values"]) for dic in file]
  73.         db.session.bulk_save_objects(entities)
  74.         db.session.commit()
  75.     print("Initial inserts done")
  76.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement