如何在Python/PyMySQL中按列标题展示SQL查询结果?
解决PyMySQL查询结果分列显示的问题
我来帮你一步步调整代码,让查询结果能整齐地按列展示,每个字段对应好标题~ 先说说原代码里几个影响输出的小问题:
- 你先执行了
results = cur.fetchall()把所有数据取走了,之后再循环for row in cur就拿不到任何数据了 - 打印字段时用的
g.genre_id和查询里的别名genreName不匹配,会导致报错或者取不到正确值 - 直接单独print每个字段没有对齐处理,自然格式混乱
- 查询操作不需要
con.commit(),这个是针对增删改操作的
下面是调整后的代码,我做了这些优化:
- 用游标直接循环获取数据(或者用fetchall后循环结果集,两种方式都可以)
- 使用字符串格式化来固定每列宽度,保证对齐
- 修正字段引用,和SQL里的别名对应
- 先打印表头,再逐行打印数据,实现分列效果
def selectTopNactors(n): # Create a new connection con = connection() # Create a cursor that returns dictionaries (方便用字段别名取值) cur = con.cursor(pymysql.cursors.DictCursor) # Execute query sql = """ SELECT g.genre_name AS 'genreName', a.actor_id AS 'actorId', COUNT(*) AS 'number_of_movies' FROM actor AS a, role AS r, movie AS m, genre AS g, movie_has_genre AS mg WHERE a.actor_id = r.actor_id AND m.movie_id = r.movie_id AND m.movie_id = mg.movie_id AND g.genre_id = mg.genre_id AND (g.genre_id , m.movie_id) IN ( SELECT g.genre_id, m.movie_id FROM movie AS m, genre AS g, movie_has_genre AS mg WHERE m.movie_id = mg.movie_id AND mg.genre_id = g.genre_id ORDER BY g.genre_id ) GROUP BY a.actor_id,g.genre_name ORDER BY g.genre_name,number_of_movies DESC LIMIT %s # 这里用参数化查询,更安全 """ # 用n作为参数传入,避免SQL注入风险 cur.execute(sql, (n,)) # 先打印表头,用格式化字符串固定列宽 print(f"{'Genre Name':<20} {'Actor ID':<10} {'Number of Movies':<20}") print("-" * 50) # 打印分隔线 # 循环获取每一行数据 for row in cur: # 用字段别名取值,格式化输出对齐 print(f"{row['genreName']:<20} {row['actorId']:<10} {row['number_of_movies']:<20}") # 查询操作不需要commit # con.commit() # 整理结果返回,表头加数据 results = cur.fetchall() con.close() # 别忘了关闭连接,避免资源泄漏 return [("genreName", "actorId", "numberOfMovies"), results]
关键改动说明:
- 使用
pymysql.cursors.DictCursor创建游标,这样返回的每一行是字典,可以直接用SQL里的别名(比如genreName)取值,更直观 - SQL里用
%s作为占位符,把参数n传入,避免硬编码,也更安全(防止SQL注入) - 用
f-string格式化输出,<20表示左对齐且占20个字符宽度,这样每列就能整齐对齐 - 先打印表头和分隔线,让输出结构更清晰
- 最后关闭数据库连接,避免资源浪费
这样运行后,你的输出就会是整齐的分列格式,比如:
Genre Name Actor ID Number of Movies -------------------------------------------------- Action 123 8 Comedy 456 12
内容的提问来源于stack exchange,提问作者Salih K. Chousein
相关产品推荐
相关产品推荐

