SQL表遍历for循环无输出问题排查请求
排查SQL表遍历循环无输出的问题
我帮你梳理了这段代码的问题,循环没输出主要是两个关键错误导致的,咱们一步步拆解解决:
核心问题分析
- 类型不匹配的比较逻辑:
len(row)返回的是整数类型的列数,但你把它和字符串"2"/"3"/"4"做比较,整数和字符串永远不会相等,导致所有分支都不会触发,自然没有打印输出。 - 语法错误:你写的
row,[0]是错误写法,多出来的逗号会让Python把row和[0]当成两个独立参数传给print,而不是取row的第一个元素,正确写法应该是row[0]。
修复后的代码
另外我还加了几个实用优化:比如处理空表的情况,还有简单的表名校验避免SQL注入风险:
def count_columns(table_name): # 简单校验表名,降低SQL注入风险(更严谨的话可以用白名单) if not table_name.replace("_", "").isalnum(): print("Invalid table name format") return cur.execute(f"SELECT * FROM {table_name}") rows = cur.fetchall() if not rows: print("No data found in the specified table") return for row in rows: column_count = len(row) if column_count == 2: print("ID: ", row[0], "Category: ", row[1]) elif column_count == 3: print("ID: ", row[0], "Range: ", row[1], "Category: ", row[2]) elif column_count == 4: print("ID: ", row[0], "Systolic: ", row[1], "Diastolic: ", row[2], "Category: ", row[3]) else: print(f"Unexpected column count ({column_count}) in row: {row}")
额外注意事项
- 确保你的
cur是已经正确连接到数据库的游标对象,如果之前有执行过修改类操作,记得先调用conn.commit()(针对事务型数据库如MySQL、PostgreSQL)。 - 直接拼接表名存在SQL注入风险,建议维护一个允许访问的表名白名单,或者使用数据库驱动提供的安全方式处理表名。
内容的提问来源于stack exchange,提问作者H kan
相关产品推荐
相关产品推荐

