示例代码:
def fetch_user_flight_information() -> list[dict]:"""Fetch all tickets for the user along with corresponding flight information and seat assignments.Returns:A list of dictionaries where each dictionary contains the ticket details,associated flight details, and the seat assignments for each ticket belonging to the user."""config = ensure_config() # Fetch from the contextconfiguration = config.get("configurable", {})passenger_id = configuration.get("passenger_id", None)if not passenger_id:raise ValueError("No passenger ID configured.")conn = sqlite3.connect(db)cursor = conn.cursor()query = """SELECT t.ticket_no, t.book_ref,f.flight_id, f.flight_no, f.departure_airport, f.arrival_airport, f.scheduled_departure, f.scheduled_arrival,bp.seat_no, tf.fare_conditionsFROM tickets tJOIN ticket_flights tf ON t.ticket_no = tf.ticket_noJOIN flights f ON tf.flight_id = f.flight_idJOIN boarding_passes bp ON bp.ticket_no = t.ticket_no AND bp.flight_id = f.flight_idWHERE t.passenger_id = ?"""cursor.execute(query, (passenger_id,))rows = cursor.fetchall()column_names = [column[0] for column in cursor.description]results = [dict(zip(column_names, row)) for row in rows]cursor.close()conn.close()return results
在代码片段中,column_names
列表包含以下列名:
ticket_no
book_ref
flight_id
flight_no
departure_airport
arrival_airport
scheduled_departure
scheduled_arrival
seat_no
fare_conditions
这些列名对应于 SQL 查询中 SELECT
子句所指定的字段。
在 SQL 查询中,我们从多个表中选择了特定的列,并使用了表连接(JOIN
)来组合这些表的数据。具体而言,查询从以下四个表中提取数据:
tickets
表(别名t
)ticket_flights
表(别名tf
)flights
表(别名f
)boarding_passes
表(别名bp
)
通过使用表的别名,查询在 SELECT
子句中指定了所需的列。例如,t.ticket_no
表示从 tickets
表中选择 ticket_no
列。
在执行查询后,cursor.description
属性提供了关于 结果集 中每一列的描述信息。通过列表推导式 [column[0] for column in cursor.description]
,我们提取了每个描述的第一个元素,即列名,生成了一个包含所有列名的列表 column_names
。
因此,column_names
列表中的列名 直接对应于我们在 SQL 查询的 SELECT
子句中所指定的列。