You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:14:55