为何这段Python数据库代码无法打印表中指定行?
咱们来一步步拆解这段代码的问题,这些点都是导致无输出甚至报错的核心原因:
类型不匹配的比较逻辑:
len(row)返回的是整数类型的列数,但你却把它和字符串"2"、"3"、"4"做相等比较。整数和字符串永远不会相等,所以所有的if/elif分支都不会被触发,自然没有任何打印输出。
修正方向:把引号去掉,改成len(row) == 2这种整数比较。未闭合的语法错误:
最后一个elif里的print语句明显没写完——字符串"Category: "没有闭合引号,整个print也缺少右括号。这种语法错误会直接导致代码无法正常运行,Python解释器会抛出语法异常,如果你没看到报错信息,可能是运行环境没有显示错误输出。索引调用的语法错误:
你写的row,[0]是错误写法,多了一个逗号,这会把row和列表[0]作为两个独立参数传给print,而不是取row的第0个元素。正确写法应该是row[0]。游标和数据库查询的潜在问题:
函数里直接使用了cur游标,但看不到你初始化游标、连接数据库以及确认查询是否返回结果的代码。如果cur.fetchall()返回空列表(比如表中没有数据,或者SQL查询写错了),循环根本不会执行,自然也不会有输出。另外,直接拼接table_name到SQL语句里还存在SQL注入风险,建议用参数化查询,比如cur.execute("SELECT * FROM %s", (table_name,))(不同数据库驱动写法可能略有差异)。
给你一个修正后的简化参考示例:
import sqlite3 def count_columns(table_name): conn = sqlite3.connect('your_database.db') cur = conn.cursor() # 使用参数化查询避免SQL注入 cur.execute("SELECT * FROM ?", (table_name,)) rows = cur.fetchall() for row in rows: row_len = len(row) if row_len == 2: print("ID: ", row[0], "Category: ", row[1]) elif row_len == 3: print("ID: ", row[0], "Range: ", row[1], "Category: ", row[2]) elif row_len == 4: print("ID: ", row[0], "Systolic: ", row[1], "Diastolic: ", row[2], "Category: ", row[3]) conn.close()
内容的提问来源于stack exchange,提问作者H kan

