Python中利用数据库列名数组生成指定结构的查询结果字典列表
解决方案
你现在的循环写法有问题——每次只查单个列,既费效率,也没法直接整出你要的多列字典结构。正确的做法是一次性查完所有需要的列,再把结果转成字典列表:
1. 构造完整查询语句
把列名数组拼成逗号分隔的字符串,作为SELECT的字段部分:
columns = ['id', 'name'] # 把列名拼接成SQL需要的格式 query = f"SELECT {', '.join(columns)} FROM Database"
2. 执行查询并转换结果
执行查询后,把每一行结果和列名对应起来生成字典,最后组成列表:
cursor.execute(query) # 取出所有查询结果 rows = cursor.fetchall() # 用zip把列名和每行数据配对,转成字典 result = [dict(zip(columns, row)) for row in rows]
这时候result就是你要的格式:
[{"id":"1","name":"John"}, {"id":"2","name":"Peter"}, ...]
额外提醒:防SQL注入
如果你的列名是来自用户输入这类不可信的来源,直接拼接会有安全风险。这时候要先验证列名是否是表的合法列,比如:
# 先提前拿到表的所有合法列名 valid_columns = ['id', 'name', 'age'] # 过滤掉非法列名 safe_columns = [col for col in columns if col in valid_columns] if not safe_columns: raise ValueError("没有合法的列可查询") query = f"SELECT {', '.join(safe_columns)} FROM Database"
内容的提问来源于stack exchange,提问作者Scaldor
相关产品推荐
相关产品推荐

