Simplify database model
This commit is contained in:
@ -1,4 +1,4 @@
|
|||||||
name,team_id,country_code
|
name,team,country_code
|
||||||
NONE,NONE,NO
|
NONE,NONE,NO
|
||||||
Max Verstappen,RedBull,NL
|
Max Verstappen,RedBull,NL
|
||||||
Sergio Perez,RedBull,MX
|
Sergio Perez,RedBull,MX
|
||||||
|
|
@ -1,24 +0,0 @@
|
|||||||
name,country_code
|
|
||||||
Bahrain,BH
|
|
||||||
Saudi Arabia,SA
|
|
||||||
Melbourne,AU
|
|
||||||
Baku,AZ
|
|
||||||
Miami,US
|
|
||||||
Imola,IT
|
|
||||||
Monaco,MC
|
|
||||||
Barcelona,ES
|
|
||||||
Montreal,CA
|
|
||||||
Spielberg,AT
|
|
||||||
Silverstone,UK
|
|
||||||
Budapest,HU
|
|
||||||
Spa,BE
|
|
||||||
Zandvoort,NL
|
|
||||||
Monza,IT
|
|
||||||
Singapore,SG
|
|
||||||
Suzuka,JP
|
|
||||||
Qatar,QA
|
|
||||||
Austin,US
|
|
||||||
Mexico,MX
|
|
||||||
Brazil,BR
|
|
||||||
Las Vegas,US
|
|
||||||
Abu Dhabi,AE
|
|
|
@ -1,4 +1,4 @@
|
|||||||
id,grandprix_id,number,date
|
id,grandprix,number,date
|
||||||
1,Bahrain,1,2023-03-05
|
1,Bahrain,1,2023-03-05
|
||||||
2,Saudi Arabia,2,2023-03-19
|
2,Saudi Arabia,2,2023-03-19
|
||||||
3,Melbourne,3,2023-04-02
|
3,Melbourne,3,2023-04-02
|
||||||
|
|
@ -1,12 +0,0 @@
|
|||||||
name,country_code
|
|
||||||
NONE,NO
|
|
||||||
RedBull,UK
|
|
||||||
Mercedes,UK
|
|
||||||
Ferrari,IT
|
|
||||||
McLaren,UK
|
|
||||||
Aston Martin,UK
|
|
||||||
Alpine,UK
|
|
||||||
Williams,UK
|
|
||||||
AlphaTauri,IT
|
|
||||||
Alpha Romeo,CH
|
|
||||||
Haas,US
|
|
|
@ -24,21 +24,15 @@ def reload_static_data(db):
|
|||||||
db.create_all()
|
db.create_all()
|
||||||
|
|
||||||
# Clear static data
|
# Clear static data
|
||||||
Team.query.delete()
|
|
||||||
Driver.query.delete()
|
Driver.query.delete()
|
||||||
GrandPrix.query.delete()
|
|
||||||
Race.query.delete()
|
Race.query.delete()
|
||||||
RaceResult.query.delete()
|
RaceResult.query.delete()
|
||||||
User.query.delete()
|
User.query.delete()
|
||||||
Guess.query.delete()
|
Guess.query.delete()
|
||||||
|
|
||||||
# Reload static data
|
# Reload static data
|
||||||
for row in load_csv("teams"):
|
|
||||||
db.session.add(Team().from_csv(row))
|
|
||||||
for row in load_csv("drivers"):
|
for row in load_csv("drivers"):
|
||||||
db.session.add(Driver().from_csv(row))
|
db.session.add(Driver().from_csv(row))
|
||||||
for row in load_csv("grandsprix"):
|
|
||||||
db.session.add(GrandPrix().from_csv(row))
|
|
||||||
for row in load_csv("races"):
|
for row in load_csv("races"):
|
||||||
db.session.add(Race().from_csv(row))
|
db.session.add(Race().from_csv(row))
|
||||||
for row in load_csv("raceresults"):
|
for row in load_csv("raceresults"):
|
||||||
|
108
model.py
108
model.py
@ -6,50 +6,25 @@ from datetime import datetime
|
|||||||
db = SQLAlchemy()
|
db = SQLAlchemy()
|
||||||
|
|
||||||
|
|
||||||
# This table contains meta information about the GPs, not specific to seasons (can be reused).
|
|
||||||
class GrandPrix(db.Model):
|
|
||||||
__tablename__ = "grandprix"
|
|
||||||
|
|
||||||
def from_csv(self, row):
|
|
||||||
self.name = str(row[0])
|
|
||||||
self.country_code = str(row[1])
|
|
||||||
return self
|
|
||||||
|
|
||||||
name: Mapped[str] = mapped_column(String(64), primary_key=True)
|
|
||||||
country_code: Mapped[str] = mapped_column(String(2)) # alpha-2 code
|
|
||||||
|
|
||||||
|
|
||||||
# This table contains manifestations of GPs, with dates
|
# This table contains manifestations of GPs, with dates
|
||||||
class Race(db.Model):
|
class Race(db.Model):
|
||||||
__tablename__ = "race"
|
__tablename__ = "race"
|
||||||
|
|
||||||
def from_csv(self, row):
|
def from_csv(self, row):
|
||||||
self.id = int(row[0])
|
self.id = int(row[0])
|
||||||
self.grandprix_id = str(row[1])
|
self.grandprix = str(row[1])
|
||||||
self.number = int(row[2])
|
self.number = int(row[2])
|
||||||
self.date = datetime.strptime(row[3], "%Y-%m-%d")
|
self.date = datetime.strptime(row[3], "%Y-%m-%d")
|
||||||
return self
|
return self
|
||||||
|
|
||||||
id: Mapped[int] = mapped_column(Integer, primary_key=True)
|
id: Mapped[int] = mapped_column(Integer, primary_key=True)
|
||||||
grandprix_id: Mapped[str] = mapped_column(ForeignKey("grandprix.name"))
|
|
||||||
|
grandprix: Mapped[str] = mapped_column(String(32))
|
||||||
|
|
||||||
number: Mapped[int] = mapped_column(Integer)
|
number: Mapped[int] = mapped_column(Integer)
|
||||||
|
|
||||||
date: Mapped[datetime] = mapped_column(DateTime)
|
date: Mapped[datetime] = mapped_column(DateTime)
|
||||||
|
|
||||||
grandprix: Mapped["GrandPrix"] = relationship("GrandPrix", foreign_keys=[grandprix_id])
|
|
||||||
|
|
||||||
|
|
||||||
# This table contains teams, e.g. RedBull
|
|
||||||
class Team(db.Model):
|
|
||||||
__tablename__ = "team"
|
|
||||||
|
|
||||||
def from_csv(self, row):
|
|
||||||
self.name = str(row[0])
|
|
||||||
self.country_code = str(row[1])
|
|
||||||
return self
|
|
||||||
|
|
||||||
name: Mapped[str] = mapped_column(String(32), primary_key=True)
|
|
||||||
country_code: Mapped[str] = mapped_column(String(2)) # alpha-2 code
|
|
||||||
|
|
||||||
|
|
||||||
# This table contains drivers and their team associations, e.g. Max Verschtappen
|
# This table contains drivers and their team associations, e.g. Max Verschtappen
|
||||||
class Driver(db.Model):
|
class Driver(db.Model):
|
||||||
@ -57,15 +32,15 @@ class Driver(db.Model):
|
|||||||
|
|
||||||
def from_csv(self, row):
|
def from_csv(self, row):
|
||||||
self.name = str(row[0])
|
self.name = str(row[0])
|
||||||
self.team_id = str(row[1])
|
self.team = str(row[1])
|
||||||
self.country_code = str(row[2])
|
self.country_code = str(row[2])
|
||||||
return self
|
return self
|
||||||
|
|
||||||
name: Mapped[str] = mapped_column(String(32), primary_key=True)
|
name: Mapped[str] = mapped_column(String(32), primary_key=True)
|
||||||
team_id: Mapped[str] = mapped_column(ForeignKey("team.name"))
|
|
||||||
country_code: Mapped[str] = mapped_column(String(2)) # alpha-2 code
|
|
||||||
|
|
||||||
team: Mapped["Team"] = relationship("Team", foreign_keys=[team_id])
|
team: Mapped[str] = mapped_column(String(32))
|
||||||
|
|
||||||
|
country_code: Mapped[str] = mapped_column(String(2)) # alpha-2 code
|
||||||
|
|
||||||
|
|
||||||
class RaceResult(db.Model):
|
class RaceResult(db.Model):
|
||||||
@ -79,53 +54,14 @@ class RaceResult(db.Model):
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
id: Mapped[int] = mapped_column(Integer, primary_key=True)
|
id: Mapped[int] = mapped_column(Integer, primary_key=True)
|
||||||
|
|
||||||
race_id: Mapped[str] = mapped_column(ForeignKey("race.id"))
|
race_id: Mapped[str] = mapped_column(ForeignKey("race.id"))
|
||||||
|
|
||||||
# These map to drivers
|
|
||||||
# p01_id: Mapped[int] = mapped_column(ForeignKey("driver.id"))
|
|
||||||
# p02_id: Mapped[int] = mapped_column(ForeignKey("driver.id"))
|
|
||||||
# p03_id: Mapped[int] = mapped_column(ForeignKey("driver.id"))
|
|
||||||
# p04_id: Mapped[int] = mapped_column(ForeignKey("driver.id"))
|
|
||||||
# p05_id: Mapped[int] = mapped_column(ForeignKey("driver.id"))
|
|
||||||
# p06_id: Mapped[int] = mapped_column(ForeignKey("driver.id"))
|
|
||||||
# p07_id: Mapped[int] = mapped_column(ForeignKey("driver.id"))
|
|
||||||
# p08_id: Mapped[int] = mapped_column(ForeignKey("driver.id"))
|
|
||||||
# p09_id: Mapped[int] = mapped_column(ForeignKey("driver.id"))
|
|
||||||
p10_id: Mapped[str] = mapped_column(ForeignKey("driver.name"))
|
|
||||||
# p11_id: Mapped[int] = mapped_column(ForeignKey("driver.id"))
|
|
||||||
# p12_id: Mapped[int] = mapped_column(ForeignKey("driver.id"))
|
|
||||||
# p13_id: Mapped[int] = mapped_column(ForeignKey("driver.id"))
|
|
||||||
# p14_id: Mapped[int] = mapped_column(ForeignKey("driver.id"))
|
|
||||||
# p15_id: Mapped[int] = mapped_column(ForeignKey("driver.id"))
|
|
||||||
# p16_id: Mapped[int] = mapped_column(ForeignKey("driver.id"))
|
|
||||||
# p17_id: Mapped[int] = mapped_column(ForeignKey("driver.id"))
|
|
||||||
# p18_id: Mapped[int] = mapped_column(ForeignKey("driver.id"))
|
|
||||||
# p19_id: Mapped[int] = mapped_column(ForeignKey("driver.id"))
|
|
||||||
# p20_id: Mapped[int] = mapped_column(ForeignKey("driver.id"))
|
|
||||||
dnf_id: Mapped[str] = mapped_column(ForeignKey("driver.name"))
|
|
||||||
|
|
||||||
race: Mapped["Race"] = relationship("Race", foreign_keys=[race_id])
|
race: Mapped["Race"] = relationship("Race", foreign_keys=[race_id])
|
||||||
|
|
||||||
# p01: Mapped["Driver"] = relationship("Driver", foreign_keys=[p01_id]) # Store all places to allow adding guesses
|
p10_id: Mapped[str] = mapped_column(ForeignKey("driver.name"))
|
||||||
# p02: Mapped["Driver"] = relationship("Driver", foreign_keys=[p02_id])
|
|
||||||
# p03: Mapped["Driver"] = relationship("Driver", foreign_keys=[p03_id])
|
|
||||||
# p04: Mapped["Driver"] = relationship("Driver", foreign_keys=[p04_id])
|
|
||||||
# p05: Mapped["Driver"] = relationship("Driver", foreign_keys=[p05_id])
|
|
||||||
# p06: Mapped["Driver"] = relationship("Driver", foreign_keys=[p06_id])
|
|
||||||
# p07: Mapped["Driver"] = relationship("Driver", foreign_keys=[p07_id])
|
|
||||||
# p08: Mapped["Driver"] = relationship("Driver", foreign_keys=[p08_id])
|
|
||||||
# p09: Mapped["Driver"] = relationship("Driver", foreign_keys=[p09_id])
|
|
||||||
p10: Mapped["Driver"] = relationship("Driver", foreign_keys=[p10_id])
|
p10: Mapped["Driver"] = relationship("Driver", foreign_keys=[p10_id])
|
||||||
# p11: Mapped["Driver"] = relationship("Driver", foreign_keys=[p11_id])
|
|
||||||
# p12: Mapped["Driver"] = relationship("Driver", foreign_keys=[p12_id])
|
dnf_id: Mapped[str] = mapped_column(ForeignKey("driver.name"))
|
||||||
# p13: Mapped["Driver"] = relationship("Driver", foreign_keys=[p13_id])
|
|
||||||
# p14: Mapped["Driver"] = relationship("Driver", foreign_keys=[p14_id])
|
|
||||||
# p15: Mapped["Driver"] = relationship("Driver", foreign_keys=[p15_id])
|
|
||||||
# p16: Mapped["Driver"] = relationship("Driver", foreign_keys=[p16_id])
|
|
||||||
# p17: Mapped["Driver"] = relationship("Driver", foreign_keys=[p17_id])
|
|
||||||
# p18: Mapped["Driver"] = relationship("Driver", foreign_keys=[p18_id])
|
|
||||||
# p19: Mapped["Driver"] = relationship("Driver", foreign_keys=[p19_id])
|
|
||||||
# p20: Mapped["Driver"] = relationship("Driver", foreign_keys=[p20_id])
|
|
||||||
dnf: Mapped["Driver"] = relationship("Driver", foreign_keys=[dnf_id]) # Only store first DNF
|
dnf: Mapped["Driver"] = relationship("Driver", foreign_keys=[dnf_id]) # Only store first DNF
|
||||||
|
|
||||||
|
|
||||||
@ -140,6 +76,11 @@ class User(db.Model):
|
|||||||
name: Mapped[str] = mapped_column(String(32), primary_key=True)
|
name: Mapped[str] = mapped_column(String(32), primary_key=True)
|
||||||
|
|
||||||
|
|
||||||
|
# Per race guesses: PX, DNF
|
||||||
|
# Per season guesses: Hot, P2 Constructor, Most overtakes, Most DNFs, Team winner,
|
||||||
|
# At least 1 podium
|
||||||
|
|
||||||
|
|
||||||
# This table contains guesses made by users
|
# This table contains guesses made by users
|
||||||
class Guess(db.Model):
|
class Guess(db.Model):
|
||||||
__tablename__ = "guess"
|
__tablename__ = "guess"
|
||||||
@ -154,15 +95,18 @@ class Guess(db.Model):
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
id: Mapped[int] = mapped_column(Integer, primary_key=True)
|
id: Mapped[int] = mapped_column(Integer, primary_key=True)
|
||||||
user_id: Mapped[str] = mapped_column(ForeignKey("user.name"))
|
|
||||||
race_id: Mapped[str] = mapped_column(ForeignKey("race.id"))
|
|
||||||
p10_id: Mapped[str] = mapped_column(ForeignKey("driver.name"))
|
|
||||||
dnf_id: Mapped[str] = mapped_column(ForeignKey("driver.name"))
|
|
||||||
raceresult_id: Mapped[int] = mapped_column(ForeignKey("raceresult.id"))
|
|
||||||
|
|
||||||
|
user_id: Mapped[str] = mapped_column(ForeignKey("user.name"))
|
||||||
user: Mapped["User"] = relationship("User", foreign_keys=[user_id])
|
user: Mapped["User"] = relationship("User", foreign_keys=[user_id])
|
||||||
|
|
||||||
|
race_id: Mapped[str] = mapped_column(ForeignKey("race.id"))
|
||||||
race: Mapped["Race"] = relationship("Race", foreign_keys=[race_id])
|
race: Mapped["Race"] = relationship("Race", foreign_keys=[race_id])
|
||||||
|
|
||||||
|
p10_id: Mapped[str] = mapped_column(ForeignKey("driver.name"))
|
||||||
p10: Mapped["Driver"] = relationship("Driver", foreign_keys=[p10_id])
|
p10: Mapped["Driver"] = relationship("Driver", foreign_keys=[p10_id])
|
||||||
|
|
||||||
|
dnf_id: Mapped[str] = mapped_column(ForeignKey("driver.name"))
|
||||||
dnf: Mapped["Driver"] = relationship("Driver", foreign_keys=[dnf_id])
|
dnf: Mapped["Driver"] = relationship("Driver", foreign_keys=[dnf_id])
|
||||||
|
|
||||||
|
raceresult_id: Mapped[int] = mapped_column(ForeignKey("raceresult.id"))
|
||||||
raceresult: Mapped["RaceResult"] = relationship("RaceResult", foreign_keys=[raceresult_id])
|
raceresult: Mapped["RaceResult"] = relationship("RaceResult", foreign_keys=[raceresult_id])
|
||||||
|
@ -39,7 +39,7 @@
|
|||||||
{% for raceresult in raceresults %}
|
{% for raceresult in raceresults %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ raceresult.race.number }}</td>
|
<td>{{ raceresult.race.number }}</td>
|
||||||
<td>{{ raceresult.race.grandprix.name }}</td>
|
<td>{{ raceresult.race.grandprix }}</td>
|
||||||
|
|
||||||
{% for user in users %}
|
{% for user in users %}
|
||||||
{% set p10 = guesses.get(raceresult.race_id).get(user.name).p10.name %}
|
{% set p10 = guesses.get(raceresult.race_id).get(user.name).p10.name %}
|
||||||
|
Reference in New Issue
Block a user