如何通过列名和行匹配值从SQLite3表中检索数据
SQLite数字列名查询问题解决
问题根源
你执行SELECT 3 FROM test_table返回重复(3,)的原因是:SQLite会把未加包裹的3识别为数值字面量,而不是列名,所以每一行都会返回固定数值3,而非你要的'3'列数据。另外你代码里的cur == conn.cursor()是语法错误——这是比较操作,不是赋值,正确写法是cur = conn.cursor()。
正确操作方法
1. 查询整个数字列的所有值
数字开头或纯数字的列名需要用**反引号`**包裹,明确告诉数据库这是列名:
cur = conn.cursor() cur.execute("SELECT `3` FROM test_table") results = cur.fetchall() # 结果会是[('H',), ('H',), ('D',), ('D',), ...]
2. 按hand_total和列名精准查询
要获取hand_total='11'且'3'列的值,可以结合条件查询和变量:
# 定义目标变量 target_hand = '11' target_column = '3' # 用f-string处理列名(列名不能用?占位符),条件值用参数化避免SQL注入 cur.execute(f"SELECT `{target_column}` FROM test_table WHERE hand_total = ?", (target_hand,)) result = cur.fetchone() # 因为hand_total是唯一标识,用fetchone取单个结果 print(result[0]) # 输出预期的'D'
额外提示
所有包含特殊字符(数字开头、空格、符号)的列名,都需要用反引号或双引号包裹,SQLite对这两种符号都支持。
内容的提问来源于stack exchange,提问作者LaBeaux
相关产品推荐
相关产品推荐

