видалено колонку km з таблиці stations

This commit is contained in:
Max Lakhman 2025-05-29 20:47:57 +03:00
parent 527552186f
commit 73fa27209f

54
db.py
View File

@ -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()]