0

0

如何将 SQL 查询结果字符串解析为对象数组

花韻仙語

花韻仙語

发布时间:2026-02-23 09:48:01

|

508人浏览过

|

来源于php中文网

原创

如何将 SQL 查询结果字符串解析为对象数组

本文详解如何将格式化的 sql 查询输出字符串(含表头与多行数据)解析为结构化的字典列表,支持 python 2 和 python 3,核心步骤包括按行切分、提取表头、逐行拆分字段并映射为键值对。

本文详解如何将格式化的 sql 查询输出字符串(含表头与多行数据)解析为结构化的字典列表,支持 python 2 和 python 3,核心步骤包括按行切分、提取表头、逐行拆分字段并映射为键值对。

在实际开发中,尤其是与遗留系统或轻量级数据库交互时,我们常会收到以纯文本形式返回的 SQL 查询结果(如 psql -t 或某些 CLI 工具输出),其格式类似表格:首行为字段名,第二行为分隔线(如 =============),后续为数据行。这类字符串虽非标准 JSON 或 CSV,但可通过文本解析高效转为结构化数据——即 Python 中的字典列表(即“对象数组”)。

以下是一个典型输入示例:

text = 'enable id \n =============\nf   avc-qwqwq\nt abd-rrtrtr\n f rec-yyuyu \n'

目标是将其转换为:

[
  {'enable': 'f', 'id': 'avc-qwqwq'},
  {'enable': 't', 'id': 'abd-rrtrtr'},
  {'enable': 'f', 'id': 'rec-yyuyu'}
]

✅ 推荐方案(Python 3 原生简洁写法)

利用 str.splitlines() 安全处理跨平台换行符,并结合解包语法提取表头与数据行:

智标领航
智标领航

专注招投标业务流程的AI助手,智能、高效、精准、易用!

下载
text = 'enable id \n =============\nf   avc-qwqwq\nt abd-rrtrtr\n f rec-yyuyu \n'

# 拆分为行列表,跳过分隔线(第2行)
header_str, _, *rows_str = text.splitlines()

# 解析表头:按空白字符分割,自动过滤空字符串
header = header_str.split()

# 对每行数据执行:split() → 与 header zip → 转为 dict
objs = [dict(zip(header, row_str.split())) for row_str in rows_str if row_str.strip()]

print(objs)

✅ 优势:代码简短、可读性强;split() 默认忽略首尾空白及连续空格,天然适配不规则缩进(如 ' f rec-yyuyu ');if row_str.strip() 过滤空行,增强鲁棒性。

⚙️ 兼容 Python 2 的等效实现

Python 2 不支持 *args 解包语法(PEP 3132),需改用迭代器显式取值:

text = 'enable id \n =============\nf   avc-qwqwq\nt abd-rrtrtr\n f rec-yyuyu \n'

lines = text.splitlines()
iter_lines = iter(lines)

# 安全提取:header(第1行)、跳过分隔线(第2行)、收集剩余行
header_str = next(iter_lines)
_ = next(iter_lines)  # 忽略分隔线
rows_str = list(iter_lines)

header = header_str.split()
objs = [dict(zip(header, row_str.split())) for row_str in rows_str if row_str.strip()]

print(objs)

⚠️ 关键注意事项

  • 字段分隔假设:上述方案默认列间以任意空白符(空格/制表符)分隔。若实际数据含空格(如组织名 "New York Tech"),则 split() 会错误切分。此时应改用固定宽度解析或正则提取(例如 re.findall(r'(\S+)\s+(\S.*)', row))。
  • 表头一致性:确保首行字段名无重复且与数据列数严格匹配,否则 zip 会截断或填充 None。
  • 编码与空白处理:splitlines() 自动处理 \n, \r\n, \r;split() 自动清理前后空格及多余空白,无需额外 strip()。
  • 空行与注释行:建议始终添加 if row_str.strip() 过滤,避免因末尾换行或空行导致空字典。

? 总结

将 SQL 文本结果转为对象数组,本质是结构化文本解析问题。核心逻辑三步走:

  1. 分层切分:用 splitlines() 拆出逻辑行;
  2. 元数据提取:从首行提取 header,跳过分隔行;
  3. 映射构造:对每行 split() 得字段值,zip(header, values) 构建键值对,再 dict() 实例化。

该方法轻量、无外部依赖、兼容双版本 Python,是处理类表格文本的通用范式。如需扩展支持 CSV 式引号包裹或类型转换(如 'enable' → bool),可在 row_str.split() 后插入自定义清洗函数。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

1026

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

335

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

379

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1802

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

377

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

1374

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

585

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

437

2024.04.29

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

1030

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
进程与SOCKET
进程与SOCKET

共6课时 | 0.4万人学习

Swoft2.x速学之http api篇课程
Swoft2.x速学之http api篇课程

共16课时 | 1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号