
SQLite 中若列名为纯数字(如 80),需用方括号 [80] 或双引号 "80" 显式标识,否则会被解析为字面量数值而非列名,导致查询返回常量而非实际列值。
sqlite 中若列名为纯数字(如 `80`),需用方括号 `[80]` 或双引号 `"80"` 显式标识,否则会被解析为字面量数值而非列名,导致查询返回常量而非实际列值。
在您的代码中:
sql_request = 'SELECT t,80 FROM SS_SZT'
SQLite 将 80 视为整数字面量(literal),而非列名,因此每一行都返回 t 列的实际值 + 固定数字 80,这正是您看到 (12.0, 80) (8.0, 80)... 的原因——第二项不是从数据库读取的列数据,而是 SQL 解析出的常量。
✅ 正确做法:使用方括号 [80](SQLite 支持)或双引号 "80" 对数字列名进行转义,明确告诉数据库这是一个标识符(identifier):
import sqlite3
def request():
with sqlite3.connect('sqlite_db.db') as sqlite_conn:
# ✅ 正确:将 '80' 作为列名引用(非字面量)
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()
? 注意事项:
- SQLite 默认不区分大小写,但列名是否含空格、特殊字符或纯数字时,必须加标识符分隔符;
- 方括号 [...] 是 SQLite 特有的标识符引用方式(兼容 SQL Server 风格),而双引号 "..." 是标准 SQL 方式,推荐优先使用双引号以提升可移植性;
- 若列名含空格(如 "score avg")或关键字(如 "order"),同样需加引号;
- 可通过 PRAGMA table_info(SS_SZT) 查看表结构,确认列名真实拼写与类型。
? 小技巧:执行 SELECT * FROM SS_SZT LIMIT 1; 在命令行或 DB 工具中验证列名是否存在且可被正常选取,避免因拼写错误或元数据不一致导致静默失败。










