SQLite数据库姓名列值转字符串并拼接为完整姓名的实现方法
问题解答
1. 返回格式说明
你拿到的[('Kristen',), ('April',), ('Justin',)]不是字典结构,是数据库查询fetchall()返回的元组列表:每一行查询结果会被封装为一个元组,即便只查询单个字段,也会生成仅含1个元素的元组,元组内的第一个元素就是你需要的字段字符串值。
2. 最优解决方案:单次查询直接拼接
不需要分两次查询first_name和last_name,一次查询同时取两个字段直接拼接即可,性能更高:
# 同时查询两个姓名字段 query_name = db.select([customer.columns.first_name, customer.columns.last_name]) proxy = connection.execute(query_name) result_rows = proxy.fetchall() # 遍历每行结果拼接完整姓名 full_names = [f"{row[0]} {row[1]}" for row in result_rows] print(full_names) # 输出示例:['Kristen Klein', 'April xxx', 'Justin xxx']
3. 已有两个单独结果列表的处理方案
如果你已经分别拿到了first_name和last_name的查询结果列表,可以分别提取字符串后按顺序拼接:
# 提取两个列表中的字符串值 first_names = [item[0] for item in result_first] last_names = [item[0] for item in result_last] # 按顺序拼接完整姓名 full_names = [f"{f_name} {l_name}" for f_name, l_name in zip(first_names, last_names)]
可选优化:按字段名取值(避免记错下标)
如果想要通过字段名直接取值,不需要记元组下标,可以用mappings()方法把结果转为字典格式:
query_name = db.select([customer.columns.first_name, customer.columns.last_name]) proxy = connection.execute(query_name) # 转为字典格式的结果列表 result_rows = proxy.mappings().fetchall() # 直接通过字段名取值拼接 full_names = [f"{row['first_name']} {row['last_name']}" for row in result_rows]
内容的提问来源于stack exchange,提问作者Arturo Altamirano
相关产品推荐
相关产品推荐

