Загрузка данных


import sys
import os
from PyQt6 import QtWidgets, uic
from PyQt6.QtCore import Qt
from dotenv import load_dotenv
import psycopg2

# Загрузка переменных окружения
load_dotenv()

class SqlQw:
    def __init__(self):
        self.con = psycopg2.connect(
            host=os.getenv('DB_HOST'),
            user=os.getenv('DB_USER'),
            password=os.getenv('DB_PASSWORD'),
            dbname=os.getenv('DB_NAME'),
            port=os.getenv('DB_PORT')
        )
        self.cur = self.con.cursor()

    def get_flights_by_passenger(self, passenger_id=1):
        sql = """
        SELECT 
            f.flight_number,
            f.departure_datetime,
            r.arrival_airport,
            f.price,
            f.is_cancelled,
            c.full_name AS captain_name,
            a.model AS aircraft_model
        FROM tickets t
        JOIN flights f ON t.flight_id = f.id
        JOIN routes r ON f.route_id = r.id
        JOIN aircraft a ON f.aircraft_id = a.id
        LEFT JOIN captains c ON a.captain_id = c.id
        WHERE t.passenger_id = %s
        ORDER BY f.departure_datetime DESC;
        """
        self.cur.execute(sql, (passenger_id,))
        return self.cur.fetchall()

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        uic.loadUi('air.ui', self)
        
        self.setWindowTitle("Авиакомпания 'Полет' - Рейсы пассажира")
        
        self.db = SqlQw()
        self.load_data()

    def load_data(self):
        rows = self.db.get_flights_by_passenger(passenger_id=1)
        
        self.listWidget.clear()
        for row in rows:
            flight_number = row[0]
            departure_dt = row[1].strftime("%d.%m.%Y %H:%M") if row[1] else "—"
            arrival_airport = row[2] or "—"
            price = f"{row[3]:.2f} руб." if row[3] else "—"
            status = " ОТМЕНЕН" if row[4] else " Активен"
            captain = row[5] or "Не назначен"
            aircraft = row[6] or "—"
            
            text = f"""
 Рейс: {flight_number}
 Дата и время вылета: {departure_dt}
Аэропорт назначения: {arrival_airport}
 Цена: {price}
 Статус: {status}
 Командир: {captain}
Самолет: {aircraft}
"""
            self.listWidget.addItem(text)

if name == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())