Don't differentiate seasons
This commit is contained in:
@ -1,23 +1,23 @@
|
||||
name,team_id,country_code,active
|
||||
NONE,NONE,NO,0
|
||||
Max Verstappen,RedBull,NL,1
|
||||
Sergio Perez,RedBull,MX,1
|
||||
Lewis Hamilton,Mercedes,UK,1
|
||||
George Russel,Mercedes,UK,1
|
||||
Charles Leclerc,Ferrari,MC,1
|
||||
Carlos Sainz,Ferrari,ES,1
|
||||
Lando Norris,McLaren,UK,1
|
||||
Oscar Piastri,McLaren,AU,1
|
||||
Fernando Alonso,Aston Martin,ES,1
|
||||
Lance Stroll,Aston Martin,CA,1
|
||||
Pierre Gasly,Alpine,FR,1
|
||||
Esteban Ocon,Alpine,FR,1
|
||||
Alexander Albon,Williams,TH,1
|
||||
Logan Sargeant,Williams,US,1
|
||||
Yuki Tsunoda,AlphaTauri,JP,1
|
||||
Daniel Ricciardo,AlphaTauri,AU,1
|
||||
Valteri Bottas,Alfa Romeo,FL,1
|
||||
Zhou Guanyu,Alfa Romeo,CN,1
|
||||
Nico Hulkenberg,Haas,DE,1
|
||||
Kevin Magnussen,Haas,DK,1
|
||||
Nyck de Vries,AlphaTauri,NL,1
|
||||
name,team_id,country_code
|
||||
NONE,NONE,NO
|
||||
Max Verstappen,RedBull,NL
|
||||
Sergio Perez,RedBull,MX
|
||||
Lewis Hamilton,Mercedes,UK
|
||||
George Russel,Mercedes,UK
|
||||
Charles Leclerc,Ferrari,MC
|
||||
Carlos Sainz,Ferrari,ES
|
||||
Lando Norris,McLaren,UK
|
||||
Oscar Piastri,McLaren,AU
|
||||
Fernando Alonso,Aston Martin,ES
|
||||
Lance Stroll,Aston Martin,CA
|
||||
Pierre Gasly,Alpine,FR
|
||||
Esteban Ocon,Alpine,FR
|
||||
Alexander Albon,Williams,TH
|
||||
Logan Sargeant,Williams,US
|
||||
Yuki Tsunoda,AlphaTauri,JP
|
||||
Daniel Ricciardo,AlphaTauri,AU
|
||||
Valteri Bottas,Alfa Romeo,FL
|
||||
Zhou Guanyu,Alfa Romeo,CN
|
||||
Nico Hulkenberg,Haas,DE
|
||||
Kevin Magnussen,Haas,DK
|
||||
Nyck de Vries,AlphaTauri,NL
|
|
@ -1,20 +1,20 @@
|
||||
id,user_id,race_id,season_id,p10_id,dnf_id,raceresult_id
|
||||
1,Henri,1,2023,Valteri Bottas,Zhou Guanyu,1
|
||||
2,Henri,2,2023,Valteri Bottas,Logan Sargeant,2
|
||||
3,Henri,3,2023,Alexander Albon,Valteri Bottas,3
|
||||
4,Henri,4,2023,Oscar Piastri,Nyck de Vries,4
|
||||
5,Henri,5,2023,Esteban Ocon,Charles Leclerc,5
|
||||
6,Henri,7,2023,Yuki Tsunoda,Charles Leclerc,6
|
||||
7,Henri,8,2023,Charles Leclerc,Carlos Sainz,7
|
||||
8,Henri,9,2023,Oscar Piastri,Kevin Magnussen,8
|
||||
9,Henri,10,2023,Alexander Albon,NONE,9
|
||||
10,Henri,11,2023,Pierre Gasly,Yuki Tsunoda,10
|
||||
11,Henri,12,2023,Esteban Ocon,Kevin Magnussen,11
|
||||
12,Henri,13,2023,Lance Stroll,Esteban Ocon,12
|
||||
13,Henri,14,2023,Lance Stroll,Pierre Gasly,13
|
||||
14,Henri,15,2023,Oscar Piastri,Alexander Albon,14
|
||||
15,Henri,16,2023,Pierre Gasly,Logan Sargeant,15
|
||||
16,Henri,17,2023,Fernando Alonso,Logan Sargeant,16
|
||||
17,Henri,18,2023,Alexander Albon,Logan Sargeant,17
|
||||
18,Henri,19,2023,Yuki Tsunoda,Logan Sargeant,18
|
||||
19,Henri,20,2023,Valteri Bottas,Logan Sargeant,19
|
||||
id,user_id,race_id,p10_id,dnf_id,raceresult_id
|
||||
1,Henri,1,Valteri Bottas,Zhou Guanyu,1
|
||||
2,Henri,2,Valteri Bottas,Logan Sargeant,2
|
||||
3,Henri,3,Alexander Albon,Valteri Bottas,3
|
||||
4,Henri,4,Oscar Piastri,Nyck de Vries,4
|
||||
5,Henri,5,Esteban Ocon,Charles Leclerc,5
|
||||
6,Henri,7,Yuki Tsunoda,Charles Leclerc,6
|
||||
7,Henri,8,Charles Leclerc,Carlos Sainz,7
|
||||
8,Henri,9,Oscar Piastri,Kevin Magnussen,8
|
||||
9,Henri,10,Alexander Albon,NONE,9
|
||||
10,Henri,11,Pierre Gasly,Yuki Tsunoda,10
|
||||
11,Henri,12,Esteban Ocon,Kevin Magnussen,11
|
||||
12,Henri,13,Lance Stroll,Esteban Ocon,12
|
||||
13,Henri,14,Lance Stroll,Pierre Gasly,13
|
||||
14,Henri,15,Oscar Piastri,Alexander Albon,14
|
||||
15,Henri,16,Pierre Gasly,Logan Sargeant,15
|
||||
16,Henri,17,Fernando Alonso,Logan Sargeant,16
|
||||
17,Henri,18,Alexander Albon,Logan Sargeant,17
|
||||
18,Henri,19,Yuki Tsunoda,Logan Sargeant,18
|
||||
19,Henri,20,Valteri Bottas,Logan Sargeant,19
|
|
@ -1,20 +1,20 @@
|
||||
id,race_id,season_id,p10_id,dnf_id
|
||||
1,1,2023,Alexander Albon,Oscar Piastri
|
||||
2,2,2023,Kevin Magnussen,Lance Stroll
|
||||
3,3,2023,Yuki Tsunoda,Charles Leclerc
|
||||
4,4,2023,Yuki Tsunoda,Nyck de Vries
|
||||
5,5,2023,Kevin Magnussen,NONE
|
||||
6,7,2023,Oscar Piastri,Lance Stroll
|
||||
7,8,2023,Pierre Gasly,NONE
|
||||
8,9,2023,Valteri Bottas,Logan Sargeant
|
||||
9,10,2023,Pierre Gasly,Nico Hulkenberg
|
||||
10,11,2023,Carlos Sainz,Esteban Ocon
|
||||
11,12,2023,Lance Stroll,Pierre Gasly
|
||||
12,13,2023,Yuki Tsunoda,Oscar Piastri
|
||||
13,14,2023,Esteban Ocon,Logan Sargeant
|
||||
14,15,2023,Valteri Bottas,Esteban Ocon
|
||||
15,16,2023,Kevin Magnussen,Yuki Tsunoda
|
||||
16,17,2023,Pierre Gasly,Valteri Bottas
|
||||
17,18,2023,Sergio Perez,Lewis Hamilton
|
||||
18,19,2023,Logan Sargeant,Esteban Ocon
|
||||
19,20,2023,Esteban Ocon,Sergio Perez
|
||||
id,race_id,p10_id,dnf_id
|
||||
1,1,Alexander Albon,Oscar Piastri
|
||||
2,2,Kevin Magnussen,Lance Stroll
|
||||
3,3,Yuki Tsunoda,Charles Leclerc
|
||||
4,4,Yuki Tsunoda,Nyck de Vries
|
||||
5,5,Kevin Magnussen,NONE
|
||||
6,7,Oscar Piastri,Lance Stroll
|
||||
7,8,Pierre Gasly,NONE
|
||||
8,9,Valteri Bottas,Logan Sargeant
|
||||
9,10,Pierre Gasly,Nico Hulkenberg
|
||||
10,11,Carlos Sainz,Esteban Ocon
|
||||
11,12,Lance Stroll,Pierre Gasly
|
||||
12,13,Yuki Tsunoda,Oscar Piastri
|
||||
13,14,Esteban Ocon,Logan Sargeant
|
||||
14,15,Valteri Bottas,Esteban Ocon
|
||||
15,16,Kevin Magnussen,Yuki Tsunoda
|
||||
16,17,Pierre Gasly,Valteri Bottas
|
||||
17,18,Sergio Perez,Lewis Hamilton
|
||||
18,19,Logan Sargeant,Esteban Ocon
|
||||
19,20,Esteban Ocon,Sergio Perez
|
|
@ -1,24 +1,24 @@
|
||||
id,grandprix_id,season_id,number,date
|
||||
1,Bahrain,2023,1,2023-03-05
|
||||
2,Saudi Arabia,2023,2,2023-03-19
|
||||
3,Melbourne,2023,3,2023-04-02
|
||||
4,Baku,2023,4,2023-04-30
|
||||
5,Miami,2023,5,2023-05-07
|
||||
6,Imola,2023,6,2023-05-21
|
||||
7,Monaco,2023,7,2023-05-28
|
||||
8,Barcelona,2023,8,2023-06-04
|
||||
9,Montreal,2023,9,2023-06-18
|
||||
10,Spielberg,2023,10,2023-07-02
|
||||
11,Silverstone,2023,11,2023-07-09
|
||||
12,Budapest,2023,12,2023-07-23
|
||||
13,Spa,2023,13,2023-07-30
|
||||
14,Zandvoort,2023,14,2023-08-27
|
||||
15,Monza,2023,15,2023-09-03
|
||||
16,Singapore,2023,16,2023-09-17
|
||||
17,Suzuka,2023,17,2023-09-24
|
||||
18,Qatar,2023,18,2023-10-08
|
||||
19,Austin,2023,19,2023-10-22
|
||||
20,Mexico,2023,20,2023-10-29
|
||||
21,Brazil,2023,21,2023-11-05
|
||||
22,Las Vegas,2023,22,2023-11-18
|
||||
23,Abu Dhabi,2023,23,2023-11-26
|
||||
id,grandprix_id,number,date
|
||||
1,Bahrain,1,2023-03-05
|
||||
2,Saudi Arabia,2,2023-03-19
|
||||
3,Melbourne,3,2023-04-02
|
||||
4,Baku,4,2023-04-30
|
||||
5,Miami,5,2023-05-07
|
||||
6,Imola,6,2023-05-21
|
||||
7,Monaco,7,2023-05-28
|
||||
8,Barcelona,8,2023-06-04
|
||||
9,Montreal,9,2023-06-18
|
||||
10,Spielberg,10,2023-07-02
|
||||
11,Silverstone,11,2023-07-09
|
||||
12,Budapest,12,2023-07-23
|
||||
13,Spa,13,2023-07-30
|
||||
14,Zandvoort,14,2023-08-27
|
||||
15,Monza,15,2023-09-03
|
||||
16,Singapore,16,2023-09-17
|
||||
17,Suzuka,17,2023-09-24
|
||||
18,Qatar,18,2023-10-08
|
||||
19,Austin,19,2023-10-22
|
||||
20,Mexico,20,2023-10-29
|
||||
21,Brazil,21,2023-11-05
|
||||
22,Las Vegas,22,2023-11-18
|
||||
23,Abu Dhabi,23,2023-11-26
|
|
@ -1,3 +0,0 @@
|
||||
year,active
|
||||
2023,1
|
||||
2024,0
|
|
@ -1,2 +1,2 @@
|
||||
name,active
|
||||
Henri,1
|
||||
name
|
||||
Henri
|
||||
|
|
@ -1,17 +1,20 @@
|
||||
import csv
|
||||
from model import *
|
||||
|
||||
|
||||
def load_csv(filename):
|
||||
with open("data/" + filename + ".csv", newline="") as file:
|
||||
reader = csv.reader(file, delimiter=",")
|
||||
next(reader, None) # skip header
|
||||
next(reader, None) # skip header
|
||||
return list(reader)
|
||||
|
||||
|
||||
# @todo CSV-Writer
|
||||
def write_csv(filename):
|
||||
with open("data/" + filename + ".csv", newline="") as file:
|
||||
writer = csv.writer(file, delimiter=",")
|
||||
|
||||
|
||||
# @todo Complete CSV Files
|
||||
# @todo Reload Static Data
|
||||
# Reload static database data, this has to be called from the app context
|
||||
@ -24,7 +27,6 @@ def reload_static_data(db):
|
||||
Team.query.delete()
|
||||
Driver.query.delete()
|
||||
GrandPrix.query.delete()
|
||||
Season.query.delete()
|
||||
Race.query.delete()
|
||||
RaceResult.query.delete()
|
||||
User.query.delete()
|
||||
@ -37,8 +39,6 @@ def reload_static_data(db):
|
||||
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("seasons"):
|
||||
db.session.add(Season().from_csv(row))
|
||||
for row in load_csv("races"):
|
||||
db.session.add(Race().from_csv(row))
|
||||
for row in load_csv("raceresults"):
|
||||
@ -50,6 +50,7 @@ def reload_static_data(db):
|
||||
|
||||
db.session.commit()
|
||||
|
||||
|
||||
# @todo Export Dynamic Data
|
||||
def export_dynamic_data():
|
||||
pass
|
||||
pass
|
||||
|
@ -13,12 +13,12 @@ db.init_app(app)
|
||||
@app.route("/")
|
||||
def index():
|
||||
users = User.query.all()
|
||||
raceresults = RaceResult.query.filter_by(season_id=2023).all()
|
||||
raceresults = RaceResult.query.all()
|
||||
|
||||
guesses = dict()
|
||||
for raceresult in raceresults:
|
||||
guesses[raceresult.race_id] = dict()
|
||||
for guess in Guess.query.filter_by(season_id=2023).all():
|
||||
for guess in Guess.query.all():
|
||||
guesses[guess.race_id][guess.user_id] = guess
|
||||
|
||||
return render_template("index.jinja", users=users, raceresults=raceresults, guesses=guesses)
|
||||
|
133
model.py
133
model.py
@ -5,97 +5,81 @@ from datetime import datetime
|
||||
|
||||
db = SQLAlchemy()
|
||||
|
||||
# Modeling these entities separately should make it easier to add new guess categories, for example team guesses or GP guesses
|
||||
|
||||
# This table contains metainformation about the GPs, not specific to seasons (can be reused).
|
||||
# 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.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
|
||||
name: Mapped[str] = mapped_column(String(64), primary_key=True)
|
||||
country_code: Mapped[str] = mapped_column(String(2)) # alpha-2 code
|
||||
|
||||
# This table contains season information
|
||||
class Season(db.Model):
|
||||
__tablename__ = "season"
|
||||
|
||||
def from_csv(self, row):
|
||||
self.year = int(row[0])
|
||||
self.active = bool(row[1])
|
||||
return self
|
||||
|
||||
year: Mapped[int] = mapped_column(Integer, primary_key=True) # This is the year
|
||||
active: Mapped[bool] = mapped_column(Boolean) # Only allow guessing the current season
|
||||
|
||||
# This table contains manifestations of GPs, with dates
|
||||
class Race(db.Model):
|
||||
__tablename__ = "race"
|
||||
|
||||
def from_csv(self, row):
|
||||
self.id = int(row[0])
|
||||
self.id = int(row[0])
|
||||
self.grandprix_id = str(row[1])
|
||||
self.season_id = int(row[2])
|
||||
self.number = int(row[3])
|
||||
self.date = datetime.strptime(row[4], "%Y-%m-%d")
|
||||
self.number = int(row[2])
|
||||
self.date = datetime.strptime(row[3], "%Y-%m-%d")
|
||||
return self
|
||||
|
||||
id: Mapped[int] = mapped_column(Integer, primary_key=True)
|
||||
grandprix_id: Mapped[str] = mapped_column(ForeignKey("grandprix.name"))
|
||||
season_id: Mapped[int] = mapped_column(ForeignKey("season.year"))
|
||||
number: Mapped[int] = mapped_column(Integer)
|
||||
date: Mapped[datetime] = mapped_column(DateTime)
|
||||
id: Mapped[int] = mapped_column(Integer, primary_key=True)
|
||||
grandprix_id: Mapped[str] = mapped_column(ForeignKey("grandprix.name"))
|
||||
number: Mapped[int] = mapped_column(Integer)
|
||||
date: Mapped[datetime] = mapped_column(DateTime)
|
||||
|
||||
grandprix: Mapped["GrandPrix"] = relationship("GrandPrix", foreign_keys=[grandprix_id])
|
||||
|
||||
grandprix: Mapped["GrandPrix"] = relationship("GrandPrix", foreign_keys=[grandprix_id])
|
||||
season: Mapped["Season"] = relationship("Season", foreign_keys=[season_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.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
|
||||
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
|
||||
class Driver(db.Model):
|
||||
__tablename__ = "driver"
|
||||
|
||||
def from_csv(self, row):
|
||||
self.name = str(row[0])
|
||||
self.team_id = str(row[1])
|
||||
self.name = str(row[0])
|
||||
self.team_id = str(row[1])
|
||||
self.country_code = str(row[2])
|
||||
self.active = bool(row[3])
|
||||
return self
|
||||
|
||||
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
|
||||
active: Mapped[bool] = mapped_column(Boolean) # Only allow guessing active drivers
|
||||
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["Team"] = relationship("Team", foreign_keys=[team_id])
|
||||
|
||||
class RaceResult(db.Model):
|
||||
__tablename__ = "raceresult"
|
||||
|
||||
def from_csv(self, row):
|
||||
self.id = int(row[0])
|
||||
self.race_id = str(row[1])
|
||||
self.season_id = int(row[2])
|
||||
self.p10_id = str(row[3])
|
||||
self.dnf_id = str(row[4])
|
||||
self.id = int(row[0])
|
||||
self.race_id = str(row[1])
|
||||
self.p10_id = str(row[2])
|
||||
self.dnf_id = str(row[3])
|
||||
return self
|
||||
|
||||
id: Mapped[int] = mapped_column(Integer, primary_key=True)
|
||||
race_id: Mapped[str] = mapped_column(ForeignKey("race.id"))
|
||||
season_id: Mapped[int] = mapped_column(ForeignKey("season.year"))
|
||||
id: Mapped[int] = mapped_column(Integer, primary_key=True)
|
||||
race_id: Mapped[str] = mapped_column(ForeignKey("race.id"))
|
||||
|
||||
# These map to drivers
|
||||
# p01_id: Mapped[int] = mapped_column(ForeignKey("driver.id"))
|
||||
@ -107,7 +91,7 @@ class RaceResult(db.Model):
|
||||
# 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"))
|
||||
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"))
|
||||
@ -118,10 +102,9 @@ class RaceResult(db.Model):
|
||||
# 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"))
|
||||
dnf_id: Mapped[str] = mapped_column(ForeignKey("driver.name"))
|
||||
|
||||
race: Mapped["Race"] = relationship("Race", foreign_keys=[race_id])
|
||||
season: Mapped["Season"] = relationship("Season", foreign_keys=[season_id]) # Redundant but should make things easier
|
||||
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
|
||||
# p02: Mapped["Driver"] = relationship("Driver", foreign_keys=[p02_id])
|
||||
@ -132,7 +115,7 @@ class RaceResult(db.Model):
|
||||
# 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])
|
||||
# p13: Mapped["Driver"] = relationship("Driver", foreign_keys=[p13_id])
|
||||
@ -143,45 +126,43 @@ class RaceResult(db.Model):
|
||||
# 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
|
||||
|
||||
|
||||
# This table contains users that can guess
|
||||
class User(db.Model):
|
||||
__tablename__ = "user"
|
||||
|
||||
def from_csv(self, row):
|
||||
self.name = str(row[0])
|
||||
self.active = bool(row[1])
|
||||
self.name = str(row[0])
|
||||
return self
|
||||
|
||||
name: Mapped[str] = mapped_column(String(32), primary_key=True)
|
||||
active: Mapped[bool] = mapped_column(Boolean) # Only show active users
|
||||
name: Mapped[str] = mapped_column(String(32), primary_key=True)
|
||||
|
||||
|
||||
# This table contains guesses made by users
|
||||
class Guess(db.Model):
|
||||
__tablename__ = "guess"
|
||||
|
||||
def from_csv(self, row):
|
||||
self.id = int(row[0])
|
||||
self.user_id = str(row[1])
|
||||
self.race_id = str(row[2])
|
||||
self.season_id = int(row[3])
|
||||
self.p10_id = str(row[4])
|
||||
self.dnf_id = str(row[5])
|
||||
self.raceresult_id = int(row[6])
|
||||
self.id = int(row[0])
|
||||
self.user_id = str(row[1])
|
||||
self.race_id = str(row[2])
|
||||
self.p10_id = str(row[3])
|
||||
self.dnf_id = str(row[4])
|
||||
self.raceresult_id = int(row[5])
|
||||
return self
|
||||
|
||||
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"))
|
||||
season_id: Mapped[int] = mapped_column(ForeignKey("season.year"))
|
||||
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"))
|
||||
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: Mapped["User"] = relationship("User", foreign_keys=[user_id])
|
||||
race: Mapped["Race"] = relationship("Race", foreign_keys=[race_id])
|
||||
season: Mapped["Season"] = relationship("Season", foreign_keys=[season_id]) # Redundant but should make things easier
|
||||
p10: Mapped["Driver"] = relationship("Driver", foreign_keys=[p10_id])
|
||||
dnf: Mapped["Driver"] = relationship("Driver", foreign_keys=[dnf_id])
|
||||
raceresult: Mapped["RaceResult"] = relationship("RaceResult", foreign_keys=[raceresult_id])
|
||||
user: Mapped["User"] = relationship("User", foreign_keys=[user_id])
|
||||
race: Mapped["Race"] = relationship("Race", foreign_keys=[race_id])
|
||||
|
||||
p10: Mapped["Driver"] = relationship("Driver", foreign_keys=[p10_id])
|
||||
dnf: Mapped["Driver"] = relationship("Driver", foreign_keys=[dnf_id])
|
||||
raceresult: Mapped["RaceResult"] = relationship("RaceResult", foreign_keys=[raceresult_id])
|
||||
|
Reference in New Issue
Block a user