Я довольно новичок в Python и Flask-SQLAlchemy.У меня есть ряд статистических данных по бейсболу из API бейсбола Yahoo Fantasy, которые я хотел бы сохранить в своей базе данных.Я борюсь с тем, как структурировать свои модели на основе информации JSON, которую я получаю от Yahoo.В частности, одной из областей является то, что Yahoo представляет все свои саты с полем stat_id
.Затем таблица используется для сопоставления этого stat_id
со строковым именем статистики (display_name
), когда оно отображается пользователю.Я хотел бы сделать что-то похожее в моих моделях, однако я не уверен, что мне нужно только сохранить stat_id
(целые числа) в моей базе данных, а затем искать их в моем коде Python.Или просто сохраните имя в моей модели с каждой статистической записью за определенный день.Если я сделаю это в своем коде Python, мне кажется, что это дало бы мне больше гибкости, если бы отображения ID-> имен когда-либо изменились в будущем.
Если бы кто-то мог дать мне некоторое руководство по разумной структуре моделидля информации JSON ниже это будет высоко ценится.Я также предоставил фрагмент моей текущей структуры модели (без сопоставления ID-> Name).
Вот фрагмент данных json, которые я пытаюсь сохранить:
Статистические данные Записи
"settings": [
{
"stat_categories": {
"stats": [
{
"stat": {
"display_name": "H/AB",
"enabled": "1",
"is_only_display_stat": "1",
"name": "Hits / At Bats",
"position_type": "B",
"sort_order": "1",
"stat_id": 60,
"stat_position_types": [
{
"stat_position_type": {
"is_only_display_stat": "1",
"position_type": "B"
}
}
]
}
},
{
"stat": {
"display_name": "R",
"enabled": "1",
"name": "Runs",
"position_type": "B",
"sort_order": "1",
"stat_id": 7,
"stat_position_types": [
{
"stat_position_type": {
"position_type": "B"
}
}
]
}
},
{
"stat": {
"display_name": "HR",
"enabled": "1",
"name": "Home Runs",
"position_type": "B",
"sort_order": "1",
"stat_id": 12,
"stat_position_types": [
{
"stat_position_type": {
"position_type": "B"
}
}
]
}
},
},
},
]
Записанная статистика команды
"team": [
[
{
"team_key": "388.l.73931.t.9"
},
{
"team_id": "9"
},
],
{
"team_stats": {
"coverage_type": "week",
"stats": [
{
"stat": {
"stat_id": "60",
"value": "58/235"
}
},
{
"stat": {
"stat_id": "7",
"value": "31"
}
},
{
"stat": {
"stat_id": "12",
"value": "13"
}
},
],
"week": "3"
}
}
],
Мои модели в настоящее время выглядят так:
class Team(db.Model):
id = db.Column(db.Integer, primary_key=True)
team_id = db.Column(db.Integer, nullable = False)
team_key = db.Column(db.String(40), nullable = False)
name = db.Column(db.String(20), unique=True, nullable=False)
weekly_team_stats = db.relationship('Stat', secondary=weekly_team_stat_map)
class Stat(db.Model):
id = db.Column(db.Integer, primary_key=True)
date = db.Column(db.DateTime, nullable=False, default=datetime.datetime)
week = db.Column(db.Integer, nullable = True)
stat_id = db.Column(db.Integer, nullable = False)
value = db.Column(db.String(80), nullable=False)
weekly_team_stat_map = db.Table('weekly_team_stat_map',
db.Column('team_id', db.ForeignKey('team.id'), primary_key=True),
db.Column('stat_id', db.ForeignKey('stat.id'), primary_key=True)
)