feat: wrap the db object around baza, which will provide helper methods

also adds the list of tracked sportsmen
This commit is contained in:
2025-05-27 12:28:51 +02:00
parent b6ae33861e
commit 65ec7ff73d
5 changed files with 153 additions and 93 deletions

View File

@@ -1,106 +1,134 @@
from datetime import datetime
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import ForeignKey
from sqlalchemy.orm import Mapped, mapped_column, DeclarativeBase, relationship
from sqlalchemy import ForeignKey, select
from sqlalchemy.orm import Mapped, mapped_column, DeclarativeBase, Session, relationship
from typing import List
import toml
global db
def initDB(app, config):
global sportowcy, trofea, sportowcy_w_meczach, statystyki_sportowcow, kluby, mecze
tnp = config['general']['db_prefix'] + "_lewangoalski_"
class baza():
class Base(DeclarativeBase):
pass
# global sportowcy, trofea, sportowcy_w_meczach, statystyki_sportowcow, kluby, mecze
db = SQLAlchemy(app, model_class=Base)
db = None
class sportowcy(Base):
__tablename__ = tnp + "sportowcy"
id_zawodnika: Mapped[ int] = mapped_column(primary_key=True)
zewnetrzne_id_zawodnika: Mapped[ str] = mapped_column()
data_urodzenia: Mapped[ str] = mapped_column()
czy_aktywny: Mapped[ bool] = mapped_column()
klub_id: Mapped[ List[str]] = mapped_column(ForeignKey(f"{tnp}kluby.id_klubu"))
klub: Mapped[ List["kluby"]] = relationship(back_populates="sportowcy_w_klubie", foreign_keys=[klub_id])
narodowosc: Mapped[ str] = mapped_column()
ilosc_trofeow: Mapped[ int] = mapped_column()
ostatnie_trofeum_id: Mapped[ int] = mapped_column(ForeignKey(f"{tnp}trofea.id_trofeum"))
ostatnie_trofeum: Mapped[ "trofea"] = relationship(back_populates="zawodnik", foreign_keys=[ostatnie_trofeum_id])
pierwszy_mecz: Mapped[ int] = mapped_column()
wycena: Mapped[ int] = mapped_column()
ostatni_gol_dla_id: Mapped[ str] = mapped_column(ForeignKey(f"{tnp}kluby.id_klubu"))
ostatni_gol_dla: Mapped[ "kluby"] = relationship(back_populates="sportowcy_ostatni_gol", foreign_keys=[ostatni_gol_dla_id])
statystyki_id: Mapped[ List[int]] = mapped_column(ForeignKey(f"{tnp}statystyki_sportowcow.id_statystyki"))
statystyki: Mapped[List["statystyki_sportowcow"]] = relationship(back_populates="sportowiec")
trofea: Mapped[ List["trofea"]] = relationship(back_populates="zawodnik", foreign_keys="[trofea.id_zawodnika]")
def __init__(self, app, config):
self.db = self.initDB(app, config)
class trofea(Base):
__tablename__ = tnp + "trofea"
id_trofeum: Mapped[ int] = mapped_column(primary_key=True)
id_zawodnika: Mapped[ int] = mapped_column(ForeignKey(f"{tnp}sportowcy.id_zawodnika"))
zawodnik: Mapped[ "sportowcy"] = relationship(back_populates="trofea", foreign_keys=[id_zawodnika])
nazwa: Mapped[ str] = mapped_column()
sezon: Mapped[ str] = mapped_column()
rok: Mapped[ str] = mapped_column()
def initDB(self, app, config):
global sportowcy, trofea, sportowcy_w_meczach, statystyki_sportowcow, kluby, mecze
tnp = config['general']['db_prefix'] + "_lewangoalski_"
class sportowcy_w_meczach(Base):
__tablename__ = tnp + "sportowcy_w_meczach"
id_rekordu: Mapped[ int] = mapped_column(primary_key=True)
id_zawodnika: Mapped[ int] = mapped_column(ForeignKey(f"{tnp}sportowcy.id_zawodnika"))
zawodnik: Mapped[ "sportowcy"] = relationship()
zewnetrzne_id_meczu: Mapped[ str] = mapped_column(ForeignKey(f"{tnp}mecze.zewnetrzne_id_meczu"))
czas_gry: Mapped[ int] = mapped_column()
goli: Mapped[ int] = mapped_column()
asyst: Mapped[ int] = mapped_column()
interwencje_bramkarza: Mapped[ int] = mapped_column()
suma_interwencji_na_bramke: Mapped[ int] = mapped_column()
zolte_kartki: Mapped[ int] = mapped_column()
czerwone_kartki: Mapped[ int] = mapped_column()
wygrana: Mapped[ int] = mapped_column()
wynik: Mapped[ float] = mapped_column()
class Base(DeclarativeBase):
pass
class statystyki_sportowcow(Base):
__tablename__ = tnp + "statystyki_sportowcow"
id_statystyki: Mapped[ int] = mapped_column(primary_key=True)
sportowiec: Mapped[ "sportowcy"] = relationship(back_populates="statystyki")
ostatni_mecz: Mapped[ int] = mapped_column(ForeignKey(f"{tnp}mecze.id_meczu"))
ilosc_wystapien: Mapped[ int] = mapped_column()
minut_gry: Mapped[ int] = mapped_column()
gier_sum: Mapped[ int] = mapped_column()
goli_sum: Mapped[ int] = mapped_column()
asyst_sum: Mapped[ int] = mapped_column()
interwencji_sum: Mapped[ int] = mapped_column()
nieobronionych_interwencji_sum: Mapped[ int] = mapped_column()
zoltych_kartek_sum: Mapped[ int] = mapped_column()
czerwonych_kartek_sum: Mapped[ int] = mapped_column()
wygranych_sum: Mapped[ int] = mapped_column()
wynik_sum: Mapped[ int] = mapped_column()
meczow_do_wynikow_sum: Mapped[ int] = mapped_column()
db = SQLAlchemy(app, model_class=Base)
class kluby(Base):
__tablename__ = tnp + "kluby"
id_klubu: Mapped[ str] = mapped_column(primary_key=True)
pelna_nazwa: Mapped[ str] = mapped_column()
skrocona_nazwa: Mapped[ str] = mapped_column()
sportowcy_w_klubie: Mapped[ List["sportowcy"]] = relationship(back_populates="klub", foreign_keys="[sportowcy.klub_id]")
sportowcy_ostatni_gol: Mapped[ "sportowcy"] = relationship(back_populates="ostatni_gol_dla", foreign_keys="[sportowcy.ostatni_gol_dla_id]")
class sportowcy(Base):
__tablename__ = tnp + "sportowcy"
id_zawodnika: Mapped[ int] = mapped_column(primary_key=True)
zewnetrzne_id_zawodnika: Mapped[ str] = mapped_column()
data_urodzenia: Mapped[ str] = mapped_column()
czy_aktywny: Mapped[ bool] = mapped_column()
klub_id: Mapped[ List[str]] = mapped_column(ForeignKey(f"{tnp}kluby.id_klubu"))
klub: Mapped[ List["kluby"]] = relationship(back_populates="sportowcy_w_klubie", foreign_keys=[klub_id])
narodowosc: Mapped[ str] = mapped_column()
ilosc_trofeow: Mapped[ int] = mapped_column()
ostatnie_trofeum_id: Mapped[ int] = mapped_column(ForeignKey(f"{tnp}trofea.id_trofeum"))
ostatnie_trofeum: Mapped[ "trofea"] = relationship(back_populates="zawodnik", foreign_keys=[ostatnie_trofeum_id])
pierwszy_mecz: Mapped[ int] = mapped_column()
wycena: Mapped[ int] = mapped_column()
ostatni_gol_dla_id: Mapped[ str] = mapped_column(ForeignKey(f"{tnp}kluby.id_klubu"))
ostatni_gol_dla: Mapped[ "kluby"] = relationship(back_populates="sportowcy_ostatni_gol", foreign_keys=[ostatni_gol_dla_id])
statystyki_id: Mapped[ List[int]] = mapped_column(ForeignKey(f"{tnp}statystyki_sportowcow.id_statystyki"))
statystyki: Mapped[List["statystyki_sportowcow"]] = relationship(back_populates="sportowiec")
trofea: Mapped[ List["trofea"]] = relationship(back_populates="zawodnik", foreign_keys="[trofea.id_zawodnika]")
class trofea(Base):
__tablename__ = tnp + "trofea"
id_trofeum: Mapped[ int] = mapped_column(primary_key=True)
id_zawodnika: Mapped[ int] = mapped_column(ForeignKey(f"{tnp}sportowcy.id_zawodnika"))
zawodnik: Mapped[ "sportowcy"] = relationship(back_populates="trofea", foreign_keys=[id_zawodnika])
nazwa: Mapped[ str] = mapped_column()
sezon: Mapped[ str] = mapped_column()
rok: Mapped[ str] = mapped_column()
class sportowcy_w_meczach(Base):
__tablename__ = tnp + "sportowcy_w_meczach"
id_rekordu: Mapped[ int] = mapped_column(primary_key=True)
id_zawodnika: Mapped[ int] = mapped_column(ForeignKey(f"{tnp}sportowcy.id_zawodnika"))
zawodnik: Mapped[ "sportowcy"] = relationship()
zewnetrzne_id_meczu: Mapped[ str] = mapped_column(ForeignKey(f"{tnp}mecze.zewnetrzne_id_meczu"))
czas_gry: Mapped[ int] = mapped_column()
goli: Mapped[ int] = mapped_column()
asyst: Mapped[ int] = mapped_column()
interwencje_bramkarza: Mapped[ int] = mapped_column()
suma_interwencji_na_bramke: Mapped[ int] = mapped_column()
zolte_kartki: Mapped[ int] = mapped_column()
czerwone_kartki: Mapped[ int] = mapped_column()
wygrana: Mapped[ int] = mapped_column()
wynik: Mapped[ float] = mapped_column()
class statystyki_sportowcow(Base):
__tablename__ = tnp + "statystyki_sportowcow"
id_statystyki: Mapped[ int] = mapped_column(primary_key=True)
sportowiec: Mapped[ "sportowcy"] = relationship(back_populates="statystyki")
ostatni_mecz: Mapped[ int] = mapped_column(ForeignKey(f"{tnp}mecze.id_meczu"))
ilosc_wystapien: Mapped[ int] = mapped_column()
minut_gry: Mapped[ int] = mapped_column()
gier_sum: Mapped[ int] = mapped_column()
goli_sum: Mapped[ int] = mapped_column()
asyst_sum: Mapped[ int] = mapped_column()
interwencji_sum: Mapped[ int] = mapped_column()
nieobronionych_interwencji_sum: Mapped[ int] = mapped_column()
zoltych_kartek_sum: Mapped[ int] = mapped_column()
czerwonych_kartek_sum: Mapped[ int] = mapped_column()
wygranych_sum: Mapped[ int] = mapped_column()
wynik_sum: Mapped[ int] = mapped_column()
meczow_do_wynikow_sum: Mapped[ int] = mapped_column()
class kluby(Base):
__tablename__ = tnp + "kluby"
id_klubu: Mapped[ str] = mapped_column(primary_key=True)
pelna_nazwa: Mapped[ str] = mapped_column()
skrocona_nazwa: Mapped[ str] = mapped_column()
sportowcy_w_klubie: Mapped[ List["sportowcy"]] = relationship(back_populates="klub", foreign_keys="[sportowcy.klub_id]")
sportowcy_ostatni_gol: Mapped[ "sportowcy"] = relationship(back_populates="ostatni_gol_dla", foreign_keys="[sportowcy.ostatni_gol_dla_id]")
class mecze(Base):
__tablename__ = tnp + "mecze"
id_meczu: Mapped[ int] = mapped_column(primary_key=True)
zewnetrzne_id_meczu: Mapped[ str] = mapped_column(unique=True)
data: Mapped[ datetime] = mapped_column()
gospodarze_id: Mapped[ str] = mapped_column(ForeignKey(f"{tnp}kluby.id_klubu"))
gospodarze: Mapped[ "kluby"] = relationship(foreign_keys=[gospodarze_id])
goscie_id: Mapped[ str] = mapped_column(ForeignKey(f"{tnp}kluby.id_klubu"))
goscie: Mapped[ "kluby"] = relationship(foreign_keys=[goscie_id])
gosp_wynik: Mapped[ int] = mapped_column()
gosc_wynik: Mapped[ int] = mapped_column()
sezon: Mapped[ str] = mapped_column()
nazwa_turnieju: Mapped[ str] = mapped_column()
skrocona_nazwa_turnieju: Mapped[ str] = mapped_column()
flaga: Mapped[ int] = mapped_column()
return db
def create_all(self):
self.db.create_all()
def simple_select_all(self, type, **kwargs):
"""
Użycie:
simple_select_all(ldb.sportowcy, zewnetrzne_id_zawodnika="").fetchall()
https://stackoverflow.com/a/75316945
Did they make it harder to query dynamically on purpose? ~Frank 19.11.2023
"""
with self.db.engine.begin() as conn:
return conn.execute(
select(type).
filter_by(**kwargs)
).scalars()
class mecze(Base):
__tablename__ = tnp + "mecze"
id_meczu: Mapped[ int] = mapped_column(primary_key=True)
zewnetrzne_id_meczu: Mapped[ str] = mapped_column(unique=True)
data: Mapped[ datetime] = mapped_column()
gospodarze_id: Mapped[ str] = mapped_column(ForeignKey(f"{tnp}kluby.id_klubu"))
gospodarze: Mapped[ "kluby"] = relationship(foreign_keys=[gospodarze_id])
goscie_id: Mapped[ str] = mapped_column(ForeignKey(f"{tnp}kluby.id_klubu"))
goscie: Mapped[ "kluby"] = relationship(foreign_keys=[goscie_id])
gosp_wynik: Mapped[ int] = mapped_column()
gosc_wynik: Mapped[ int] = mapped_column()
sezon: Mapped[ str] = mapped_column()
nazwa_turnieju: Mapped[ str] = mapped_column()
skrocona_nazwa_turnieju: Mapped[ str] = mapped_column()
flaga: Mapped[ int] = mapped_column()
return db