видалено колонку km з таблиці stations
This commit is contained in:
parent
527552186f
commit
73fa27209f
54
db.py
54
db.py
@ -19,8 +19,7 @@ def init_db():
|
||||
con.execute('''
|
||||
CREATE TABLE IF NOT EXISTS stations (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
name TEXT UNIQUE NOT NULL,
|
||||
km REAL
|
||||
name TEXT UNIQUE NOT NULL
|
||||
);
|
||||
''')
|
||||
con.execute('''
|
||||
@ -38,6 +37,7 @@ def init_db():
|
||||
''')
|
||||
con.commit()
|
||||
|
||||
|
||||
def save_schedule(entries: List[Dict]):
|
||||
"""
|
||||
Зберігає повний розклад.
|
||||
@ -80,13 +80,12 @@ def save_schedule(entries: List[Dict]):
|
||||
tid = train_ids[idx]
|
||||
for t in e['times']:
|
||||
st = t['station']
|
||||
km = t.get('km')
|
||||
# Додаємо лише станцію без колонки km
|
||||
con.execute('''
|
||||
INSERT INTO stations (name, km)
|
||||
VALUES (?, ?)
|
||||
ON CONFLICT(name) DO UPDATE SET
|
||||
km = COALESCE(excluded.km, stations.km)
|
||||
''', (st, km))
|
||||
INSERT INTO stations (name)
|
||||
VALUES (?)
|
||||
ON CONFLICT(name) DO NOTHING
|
||||
''', (st,))
|
||||
station_id = con.execute(
|
||||
'SELECT id FROM stations WHERE name = ?',
|
||||
(st,)
|
||||
@ -100,42 +99,31 @@ def save_schedule(entries: List[Dict]):
|
||||
''', (tid, station_id, arr, dep, today))
|
||||
con.commit()
|
||||
|
||||
|
||||
def get_schedule(route: Optional[str] = None, travel_date: Optional[str] = None) -> List[Dict]:
|
||||
"""
|
||||
Повертає розклад поїздів. Якщо вказано route, фільтрує за ним.
|
||||
Повертає список:
|
||||
[{'train_number': ..., 'route': ..., 'times': [...]}, ...]
|
||||
"""
|
||||
"""Повертає розклад поїздів. Якщо вказано route, фільтрує за ним."""
|
||||
from datetime import date as _date
|
||||
travel_date = travel_date or _date.today().isoformat()
|
||||
with sqlite3.connect(DB_PATH) as con:
|
||||
if route:
|
||||
rows = con.execute('''
|
||||
SELECT tr.train_number, tr.route, st.name, sc.arrival_time, sc.departure_time
|
||||
FROM schedules sc
|
||||
JOIN trains tr ON sc.train_id = tr.id
|
||||
JOIN stations st ON sc.station_id = st.id
|
||||
WHERE sc.travel_date = ? AND tr.route = ?
|
||||
ORDER BY tr.train_number, st.id
|
||||
FROM schedules sc
|
||||
JOIN trains tr ON sc.train_id = tr.id
|
||||
JOIN stations st ON sc.station_id = st.id
|
||||
WHERE sc.travel_date = ? AND tr.route = ?
|
||||
ORDER BY tr.train_number, st.id
|
||||
''', (travel_date, route)).fetchall()
|
||||
else:
|
||||
rows = con.execute('''
|
||||
SELECT tr.train_number, tr.route, st.name, sc.arrival_time, sc.departure_time
|
||||
FROM schedules sc
|
||||
JOIN trains tr ON sc.train_id = tr.id
|
||||
JOIN stations st ON sc.station_id = st.id
|
||||
WHERE sc.travel_date = ?
|
||||
ORDER BY tr.train_number, st.id
|
||||
FROM schedules sc
|
||||
JOIN trains tr ON sc.train_id = tr.id
|
||||
JOIN stations st ON sc.station_id = st.id
|
||||
WHERE sc.travel_date = ?
|
||||
ORDER BY tr.train_number, st.id
|
||||
''', (travel_date,)).fetchall()
|
||||
|
||||
schedule: Dict[tuple, List[Dict]] = {}
|
||||
for num, rt, station, arrival, departure in rows:
|
||||
schedule.setdefault((num, rt), []).append({
|
||||
'station': station,
|
||||
'arrival': arrival,
|
||||
'departure': departure
|
||||
})
|
||||
return [
|
||||
{'train_number': num, 'route': rt, 'times': times}
|
||||
for (num, rt), times in schedule.items()
|
||||
]
|
||||
schedule.setdefault((num, rt), []).append({'station': station, 'arrival': arrival, 'departure': departure})
|
||||
return [{'train_number': num, 'route': rt, 'times': times} for (num, rt), times in schedule.items()]
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user