
SQLite 中若列名为纯数字(如 80),需用方括号 [80] 或双引号 "80" 显式标识,否则 SQL 解析器会将其视为字面量数值而非列名,导致查询返回常量而非实际列值。
sqlite 中若列名为纯数字(如 `80`),需用方括号 `[80]` 或双引号 `"80"` 显式标识,否则 sql 解析器会将其视为字面量数值而非列名,导致查询返回常量而非实际列值。
在你的代码中:
sql_request = 'SELECT t,80 FROM SS_SZT'
SQLite 将 80 解析为整数常量,而非表中的列名。因此每行结果第二项恒为 80(即字面量),而非从 SS_SZT 表中读取的 80 列的实际值——这正是你看到 (12.0, 80) (8.0, 80)... 的根本原因。
✅ 正确做法是明确标识数字列名为标识符。SQLite 支持两种标准方式:
- 使用方括号:[80](SQL Server 风格,SQLite 兼容)
- 使用双引号:"80"(符合 SQL 标准,推荐)
修正后的查询语句如下:
import sqlite3
def request():
with sqlite3.connect('sqlite_db.db') as sqlite_conn:
# ✅ 正确:将数字列名用双引号或方括号包裹
sql_request = 'SELECT t, "80" FROM SS_SZT' # 推荐使用双引号
# 或:sql_request = 'SELECT t, [80] FROM SS_SZT'
sql_cursor = sqlite_conn.execute(sql_request)
res = sql_cursor.fetchall()
for row in res:
print(row)
request()? 注意事项:
- 单引号 '80' ❌ 表示字符串字面量,仍会导致相同问题;
- 列名含空格、特殊字符或关键字(如 order, group)时,也必须加引号;
- 建议在建表时避免使用纯数字作为列名;若已存在,统一用 "80" 引用以保证可读性与兼容性;
- 可通过 PRAGMA table_info(SS_SZT); 检查表结构,确认列名是否确实为 80(而非被误命名为其他名称)。
? 小技巧:执行 SELECT * FROM SS_SZT LIMIT 1; 查看实际列名和数据,有助于快速验证列定义。

















