64 lines
2.0 KiB
Python
64 lines
2.0 KiB
Python
"""
|
|
data/database.py
|
|
|
|
The base definitions for database access and definition
|
|
"""
|
|
from datetime import datetime
|
|
import os
|
|
|
|
from dotenv import load_dotenv
|
|
|
|
from sqlalchemy import create_engine, Date, Integer, String
|
|
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, sessionmaker
|
|
|
|
|
|
load_dotenv()
|
|
|
|
class Base(DeclarativeBase):
|
|
pass
|
|
|
|
|
|
class DataAccessLayer:
|
|
|
|
def __init__(self):
|
|
self.engine = None
|
|
self.conn_string = os.getenv("DATABASE_URL")
|
|
|
|
|
|
def connect(self):
|
|
self.engine = create_engine(self.conn_string)
|
|
Base.metadata.create_all(self.engine)
|
|
self.Session = sessionmaker(bind=self.engine)
|
|
|
|
|
|
dal = DataAccessLayer()
|
|
|
|
|
|
class PowerballDraw(Base):
|
|
__tablename__ = 'powerball_draws'
|
|
|
|
draw_date: Mapped[datetime.date] = mapped_column(Date, primary_key=True)
|
|
main_ball1: Mapped[int] = mapped_column(Integer)
|
|
main_ball2: Mapped[int] = mapped_column(Integer)
|
|
main_ball3: Mapped[int] = mapped_column(Integer)
|
|
main_ball4: Mapped[int] = mapped_column(Integer)
|
|
main_ball5: Mapped[int] = mapped_column(Integer)
|
|
powerball: Mapped[int] = mapped_column(Integer)
|
|
power_play: Mapped[int] = mapped_column(Integer)
|
|
|
|
|
|
def __repr__(self):
|
|
return f"PowerballDraw({self.draw_date=}, {self.main_ball1=}, {self.main_ball2=}, {self.main_ball3=}, " \
|
|
f"{self.main_ball4=}, {self.main_ball5=}, {self.powerball=}, {self.power_play=})"
|
|
|
|
def __str__(self):
|
|
return f"{self.draw_date}, [{self.main_ball1}, {self.main_ball2}, {self.main_ball3}, {self.main_ball4}, " \
|
|
f"{self.main_ball5}], {self.powerball}, {self.power_play if self.power_play else 1}x"
|
|
|
|
def __eq__(self, other):
|
|
return self.draw_date == other.draw_date and self.main_ball1 == other.main_ball1 and \
|
|
self.main_ball2 == other.main_ball2 and self.main_ball3 == other.main_ball3 and \
|
|
self.main_ball4 == other.main_ball4 and self.main_ball5 == other.main_ball5 and \
|
|
self.powerball == other.powerball and self.power_play == other.power_play
|
|
|