Python SQLite3中如何通过外键ID获取关联表对应信息?
SQLite3多表关联查询流派名称解决方案
核心实现逻辑
通过JOIN关联查询绑定Shows表与Genre表的外键关联字段GenreID,即可直接通过电影ID查询到对应的所有流派名称。一部电影对应多个流派时,查询会返回多条结果,可直接聚合为列表使用。
注意:
lastrowid仅用于获取刚执行INSERT操作生成的自增主键ID,和查询场景完全无关,因此该方法无法满足你的需求。
代码实现示例
1. 两表结构(Shows表每条记录对应单个流派)
import sqlite3 # 建立数据库连接 conn = sqlite3.connect("你的数据库文件路径.db") cursor = conn.cursor() # 替换为你需要查询的电影ID target_show_id = 1 # 执行参数化查询,避免SQL注入风险 cursor.execute(""" SELECT g.GenreName FROM Shows s INNER JOIN Genre g ON s.GenreID = g.GenreID WHERE s.ShowID = ? """, (target_show_id,)) # 提取所有流派名称为列表 genre_list = [item[0] for item in cursor.fetchall()] print(genre_list) # 关闭资源 cursor.close() conn.close()
2. 推荐三表结构(适配一部电影对应多个流派的多对多场景)
如果你的Shows表中GenreID存储的是多ID拼接字符串,建议调整为规范的多对多结构,新增ShowGenre中间表存储电影与流派的对应关系,字段包含ShowID、GenreID。
对应查询代码:
import sqlite3 conn = sqlite3.connect("你的数据库文件路径.db") cursor = conn.cursor() target_show_id = 1 cursor.execute(""" SELECT g.GenreName FROM ShowGenre sg INNER JOIN Genre g ON sg.GenreID = g.GenreID WHERE sg.ShowID = ? """, (target_show_id,)) genre_list = [item[0] for item in cursor.fetchall()] print(genre_list) cursor.close() conn.close()
内容的提问来源于stack exchange,提问作者ShadowPoke3
相关产品推荐
相关产品推荐

