From 73fa27209fde77978bf44977ab35e85742cceb6a Mon Sep 17 00:00:00 2001 From: zik Date: Thu, 29 May 2025 20:47:57 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B2=D0=B8=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=BE=20=D0=BA=D0=BE=D0=BB=D0=BE=D0=BD=D0=BA=D1=83=20km=20?= =?UTF-8?q?=D0=B7=20=D1=82=D0=B0=D0=B1=D0=BB=D0=B8=D1=86=D1=96=20stations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db.py | 54 +++++++++++++++++++++--------------------------------- 1 file changed, 21 insertions(+), 33 deletions(-) diff --git a/db.py b/db.py index 7ec0d21..b04c0a3 100644 --- a/db.py +++ b/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()]