133 lines
3.6 KiB
Python
133 lines
3.6 KiB
Python
from db_connector import RemoteDB
|
|
import logging
|
|
|
|
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
|
logger = logging.getLogger("db_utils.py")
|
|
stream_handler = logging.StreamHandler()
|
|
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
|
stream_handler.setFormatter(formatter)
|
|
logger.addHandler(stream_handler)
|
|
|
|
|
|
# Generic DB Methods ==================================================================================================
|
|
def drop_view(view_name):
|
|
drop_view_sql = f"""
|
|
DROP VIEW IF EXISTS {view_name};
|
|
"""
|
|
|
|
remote_db = RemoteDB()
|
|
try:
|
|
result = remote_db.execute_command(drop_view_sql)
|
|
logger.info(f"{view_name} dropped.")
|
|
except Exception as e:
|
|
logger.exception(f"Exception while dropping {view_name}. Msg: {e} ")
|
|
finally:
|
|
remote_db.close()
|
|
logger.debug(f"RemoteDB object closed.")
|
|
|
|
|
|
def get_view(view_name, rows="*"):
|
|
get_view_sql = f"""
|
|
SELECT {rows}
|
|
FROM {view_name};
|
|
"""
|
|
remote_db = RemoteDB()
|
|
try:
|
|
result = remote_db.execute_query(get_view_sql)
|
|
logger.info(f"Succesfully retrieved {view_name}")
|
|
return result
|
|
except Exception as e:
|
|
logger.exception(f"Failed getting view for {view_name} with exception {e}.")
|
|
finally:
|
|
remote_db.close()
|
|
|
|
def query_table(table_name):
|
|
pass
|
|
|
|
|
|
# Specialized DB methods ==============================================================================================
|
|
def create_heat_view():
|
|
create_heat_view_sql = """
|
|
CREATE VIEW heat AS
|
|
SELECT
|
|
ST_Y(geometry) AS latitude,
|
|
ST_X(geometry) AS longitude,
|
|
AccidentYear AS year
|
|
FROM
|
|
accidents
|
|
WHERE
|
|
ST_Y(geometry) IS NOT NULL AND
|
|
ST_X(geometry) IS NOT NULL AND
|
|
AccidentYear IS NOT NULL;
|
|
"""
|
|
|
|
remote_db = RemoteDB()
|
|
remote_db.execute_command(create_heat_view_sql)
|
|
remote_db.close()
|
|
logger.info("Heat View Created")
|
|
|
|
|
|
def create_bike_heat_view():
|
|
create_heat_view_sql = """
|
|
CREATE VIEW bikeheat AS
|
|
SELECT
|
|
ST_Y(geometry) AS latitude,
|
|
ST_X(geometry) AS longitude,
|
|
AccidentYear AS year
|
|
FROM
|
|
accidents
|
|
WHERE
|
|
ST_Y(geometry) IS NOT NULL AND
|
|
ST_X(geometry) IS NOT NULL AND
|
|
AccidentYear IS NOT NULL AND
|
|
accidentinvolvingbicycle IS TRUE;
|
|
"""
|
|
|
|
remote_db = RemoteDB()
|
|
remote_db.execute_command(create_heat_view_sql)
|
|
remote_db.close()
|
|
logger.info("BIKE Heat View Created")
|
|
|
|
|
|
def create_pedestrian_heat_view():
|
|
create_heat_view_sql = """
|
|
CREATE VIEW pedestrianheat AS
|
|
SELECT
|
|
ST_Y(geometry) AS latitude,
|
|
ST_X(geometry) AS longitude,
|
|
AccidentYear AS year
|
|
FROM
|
|
accidents
|
|
WHERE
|
|
ST_Y(geometry) IS NOT NULL AND
|
|
ST_X(geometry) IS NOT NULL AND
|
|
AccidentYear IS NOT NULL AND
|
|
accidentinvolvingpedestrian IS TRUE;
|
|
"""
|
|
|
|
remote_db = RemoteDB()
|
|
remote_db.execute_command(create_heat_view_sql)
|
|
remote_db.close()
|
|
logger.info("PEDESTRIAN Heat View Created")
|
|
|
|
|
|
def create_motorcycle_heat_view():
|
|
create_heat_view_sql = """
|
|
CREATE VIEW motoheat AS
|
|
SELECT
|
|
ST_Y(geometry) AS latitude,
|
|
ST_X(geometry) AS longitude,
|
|
AccidentYear AS year
|
|
FROM
|
|
accidents
|
|
WHERE
|
|
ST_Y(geometry) IS NOT NULL AND
|
|
ST_X(geometry) IS NOT NULL AND
|
|
AccidentYear IS NOT NULL AND
|
|
accidentinvolvingpedestrian IS TRUE;
|
|
"""
|
|
|
|
remote_db = RemoteDB()
|
|
remote_db.execute_command(create_heat_view_sql)
|
|
remote_db.close()
|
|
logger.info("MOTO Heat View Created") |