From 43eb34ea7eaffdb4271e74939211de13582b3f93 Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Thu, 5 Mar 2026 18:39:02 -0500 Subject: [PATCH] Test code to populate tables --- main.py | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 112 insertions(+), 1 deletion(-) diff --git a/main.py b/main.py index a2a9b57..da45f08 100644 --- a/main.py +++ b/main.py @@ -1,5 +1,116 @@ +from datetime import datetime +from time import sleep + +from sqlalchemy import func +from sqlalchemy.exc import IntegrityError + +from data.database import dal, MegaMillionsDraw, PowerballDraw +import lottery_predictor.collect as predictor +from util.drawing import get_mega_millions_object, get_powerball_object +from util.environment import load_environment_variables +from util.scrape import scrape_game_history + +project_variables = load_environment_variables() + def main(): - print("Hello from lottery-analyzer!") + print("Lottery Analyzer initializing...") + # convert specific variables for use + mm_start_year = int(project_variables["LP_MEGA_MILLIONS_INCEPTION"]) + pb_start_year = int(project_variables["LP_POWERBALL_INCEPTION"]) + end_year = datetime.today().year + date_format = project_variables["LP_DATE_INSERT_FORMAT"] + max_mm_main = int(project_variables["LP_MEGA_MILLIONS_MAX_MAIN_BALL"]) + max_megaball = int(project_variables["LP_MEGA_MILLIONS_MAX_MEGA_BALL"]) + max_pb_main = int(project_variables["LP_POWERBALL_MAX_MAIN_BALL"]) + max_powerball = int(project_variables["LP_POWERBALL_MAX_POWERBALL"]) + + + # connect to the database + print("Connecting to the database...") + dal.connect() + session = dal.Session() + + print("Collecting and processing missing Mega Millions draws...") + # if there are no records in the MegaMillionsDraw table... + if predictor.get_record_count('MegaMillionsDraw') == 0: + # loop over all years and scrape the data for each + for year in range(mm_start_year, end_year + 1): + print(f"\tCollecting {year}...") + scrape_data = scrape_game_history(game='mega-millions', year=year) + # convert and insert the records + for key, value in scrape_data.items(): + record = get_mega_millions_object(draw_date=key, draw_result=value) + try: + session.add(record) + session.commit() + except IntegrityError: + pass + # sleep between records and years to avoid querying the site too often + sleep(60) + + # commit all the records to the database + else: + most_recent = session.query(func.max(MegaMillionsDraw.draw_date)).first() + start_year = datetime.strptime(str(most_recent[0]), date_format).year + # loop over the years needed and gather records + for year in range(start_year, end_year + 1): + print(f"\tCollecting {year}...") + scrape_data = scrape_game_history(game='powerball', year=year) + # convert and insert the records + for key, value in scrape_data.items(): + record = get_powerball_object(draw_date=key, draw_result=value) + try: + session.add(record) + session.commit() + except IntegrityError: + pass + # sleep between records and years to avoid querying the site too often + sleep(60) + + print("Collecting and processing missing Powerball draws...") + # if there are no records in the PowerBallDraw table... + if len(session.query(PowerballDraw).all()) == 0: + # loop over all years and scrape the data for each + for year in range(pb_start_year, end_year + 1): + print(f"\tCollecting {year}...") + scrape_data = scrape_game_history(game='powerball', year=year) + # convert and insert the records + for key, value in scrape_data.items(): + record = get_powerball_object(draw_date=key, draw_result=value) + try: + session.add(record) + session.commit() + except IntegrityError: + pass + # sleep between records and years to avoid querying the site too often + sleep(60) + + # commit all the records to the database + session.commit() + else: + most_recent = session.query(func.max(PowerballDraw.draw_date)).first() + start_year = datetime.strptime(most_recent[0], str(date_format)).year + # loop over the years needed and gather records + for year in range(start_year, end_year + 1): + print(f"\tCollecting {year}...") + scrape_data = scrape_game_history(game='powerball', year=year) + # convert and insert the records + for key, value in scrape_data.items(): + record = get_powerball_object(draw_date=key, draw_result=value) + try: + session.add(record) + session.commit() + except IntegrityError: + pass + # sleep between records and years to avoid querying the site too often + sleep(60) + + + + mm_count = session.query(MegaMillionsDraw).count() + pb_count = session.query(PowerballDraw).count() + + print(f"There are {mm_count} Mega Millions draw records and {pb_count} Powerball records") if __name__ == "__main__":