如何在Python的SQLite3中统计各语言电影参演演员数并返回JSON
没问题,这就帮你实现这个需求!我们可以分两步来完成:先写出正确的SQL查询语句关联三张表统计数据,再用Python的sqlite3和json模块把结果转换成你要的JSON格式。
步骤1:编写SQL查询语句
首先得关联film_actor、film和language三张表,通过language_id关联电影的语言信息,然后按语言名称分组,统计每个语言下独特的演员ID数量(用DISTINCT避免重复统计同一演员):
SELECT l.name AS language_name, COUNT(DISTINCT fa.actor_id) AS actor_count FROM film_actor fa JOIN film f ON fa.film_id = f.film_id JOIN language l ON f.language_id = l.language_id GROUP BY l.name;
这个查询的逻辑很清晰:
- 从
film_actor表(简称fa)拿到演员和电影的关联关系 - 通过
film_id关联到film表(简称f),获取电影对应的语言ID - 再通过
language_id关联到language表(简称l),拿到语言的名称 - 最后按语言名称分组,统计每组里不重复的演员ID数量
步骤2:Python代码实现
接下来用Python连接SQLite数据库,执行上面的查询,把结果转换成指定的JSON格式:
import sqlite3 import json def get_actor_count_by_language(db_path): # 连接SQLite数据库 conn = sqlite3.connect(db_path) cursor = conn.cursor() # 执行查询语句 query = """ SELECT l.name AS language_name, COUNT(DISTINCT fa.actor_id) AS actor_count FROM film_actor fa JOIN film f ON fa.film_id = f.film_id JOIN language l ON f.language_id = l.language_id GROUP BY l.name; """ cursor.execute(query) # 把查询结果转换成字典 result_dict = {row[0]: row[1] for row in cursor.fetchall()} # 关闭连接 cursor.close() conn.close() # 转成JSON字符串返回(如果需要字典的话直接返回result_dict即可) return json.dumps(result_dict, indent=4) # 调用示例,替换成你的数据库路径 if __name__ == "__main__": json_result = get_actor_count_by_language("your_database.db") print(json_result)
说明
- 如果你不需要JSON字符串,而是直接要Python字典,那直接返回
result_dict就行,不用调用json.dumps() - 记得把
your_database.db替换成你实际的SQLite数据库文件路径 COUNT(DISTINCT fa.actor_id)是关键,确保同一个演员即使参演多部同语言电影也只被统计一次
内容的提问来源于stack exchange,提问作者derriadiergummi
相关产品推荐
相关产品推荐

