首页/新闻资讯/正文详情

Python3 提取 MySQL 数据并转字典数组:TaoToken 统一 Key 配置与验证

发布时间:2026/9/26 17:23:11 来源:云帆数科 栏目:资讯中心
Python3 提取 MySQL 数据并转字典数组:TaoToken 统一 Key 配置与验证
1. 从一次数据导出需求说起Python3 提取 MySQL 数据并转成字典数组是后端脚本、数据清洗、接口返回组装里出现频率极高的一步。你查完库拿到的是元组列表但下游要的是[{id:1,name:...}]这种结构中间这层转换如果写得不稳字段顺序、列名大小写、空值处理都会埋坑。这篇就聚焦这条完整链路连接参数怎么配、cursor 类型怎么选、字段映射怎么写、返回结构怎么验证最后给一份可复制的config.toml骨架和统一 Key 配置示例。适合谁看刚接触 pymysql 想一次写对的同学已经能查库但返回结构总对不上的同学想把数据库连接信息从代码里抽出来、用统一配置管理的同学。核心检索词就三个python3、mysql、字典数组。下面所有代码我都实际跑过参数和报错都来自真实终端输出。先说结论转字典数组最稳的写法是cursor.description取列名再配合zip和字典推导式一行搞定不用手写索引循环。但前提是连接和 cursor 配置要对否则description拿不到、中文乱码、字段名重复这些问题会接连出现。2. TaoToken 统一 Key 前置配置在写数据库脚本之前先把模型调用这条线的前置配置理清。很多同学的数据脚本后面要接一个「把查询结果丢给模型做摘要/分类」的步骤这时候如果每个脚本都硬编码一份 Key维护起来很痛苦。TaoToken 提供统一 Key 的方式把模型访问收敛到一个入口脚本里只读配置。官网入口https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentAPI 地址https://taotoken.net/api你需要先拿到 Key再去控制台确认额度与模型可用性。这几个 deep link 按用途分模型对话验证模型是否通https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentmodel-chatCoding Plan长期编码/Agent 场景https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcoding-plan控制台https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentconsoleAPI Keys 管理https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentapi-keys接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentdocClaudeCodeAnthropic 相关https://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentclaudecode注意Key 只放在本地配置文件或环境变量里不要提交到 Git。下面config.toml里的占位符记得替换成你自己的值。3. 可复制的 config.toml 与连接配置3.1 config.toml 骨架把数据库连接和模型 Key 都收进一个 TOML 文件Python3 用标准库tomllib3.11或tomli读取。骨架如下# config.toml [mysql] host 127.0.0.1 port 3306 user root password your_password database data charset utf8mb4 [taotoken] api_base https://taotoken.net/api api_key sk-替换成你的Key model gpt-4o-minicharset建议用utf8mb4比utf8多支持 emoji 和部分生僻字避免写入时报Incorrect string value。3.2 读取配置并建立连接import tomllib # Python 3.11低版本用 pip install tomli 后 import tomli as tomllib import pymysql with open(config.toml, rb) as f: cfg tomllib.load(f) mysql_cfg cfg[mysql] conn pymysql.connect( hostmysql_cfg[host], portmysql_cfg[port], usermysql_cfg[user], passwordmysql_cfg[password], databasemysql_cfg[database], charsetmysql_cfg[charset], cursorclasspymysql.cursors.DictCursor, # 关键直接返回字典 )这里有个关键选择cursorclass。pymysql 默认是Cursorfetchall()返回元组列表设成DictCursor后每行直接是字典列名做 key。两种路线cursor 类型fetchall 返回转字典数组成本适用场景Cursor默认元组列表需手动 zip 列名需要按位置取值、列名重复DictCursor字典列表几乎为零绝大多数业务查询如果你用DictCursor其实第 4 节的转换代码可以省掉但很多老项目、或者需要兼容多种 cursor 的场景还是得会手动转。下面两种都讲。4. 查询结果转字典数组的三种写法4.1 手动 zip 列名推荐这是最通用、最好理解的写法不依赖DictCursorimport pymysql conn pymysql.connect( host127.0.0.1, port3306, userroot, passwordyour_password, databasedata, charsetutf8mb4, ) sql SELECT id, name, certificate_no FROM userinfo cursor conn.cursor() try: cursor.execute(sql) columns [col[0] for col in cursor.description] # 取列名 rows cursor.fetchall() data_dict [dict(zip(columns, row)) for row in rows] print(data_dict) except Exception as e: conn.rollback() print(查询失败:, e) finally: cursor.close() conn.close()cursor.description是一个元组序列每个元素形如(id, None, None, None, None, None, None)第 0 位就是列名。zip(columns, row)把列名和值配对dict()转成字典外层列表推导式把每行都转一遍最终就是字典数组。4.2 用 DictCursor 直接拿如果你在连接时已经设了cursorclasspymysql.cursors.DictCursor那fetchall()本身就是字典数组cursor conn.cursor() cursor.execute(SELECT id, name FROM userinfo) data_dict cursor.fetchall() # 直接就是 [{id:1,name:...}]省事但要注意DictCursor下如果 SQL 里有同名列比如 join 两张表都有id后面的会覆盖前面的得用别名区分。4.3 迭代函数 map了解即可有些老代码用map加自定义函数def row_to_dict(row): return dict(zip([c[0] for c in cursor.description], row)) data_dict list(map(row_to_dict, cursor.fetchall()))功能等价但可读性不如列表推导式而且cursor.description在函数里是闭包引用容易踩作用域坑。新代码不建议这么写。5. 验证返回结构是否为字典数组写完转换逻辑别急着往下游传先验证结构。我习惯加一段断言式检查def validate_dict_array(data): assert isinstance(data, list), 顶层必须是 list for i, row in enumerate(data): assert isinstance(row, dict), f第 {i} 行不是 dict for k in row: assert isinstance(k, str), f第 {i} 行 key 不是字符串: {k} return True result [dict(zip(columns, row)) for row in rows] print(结构校验:, validate_dict_array(result)) print(首行样例:, result[0] if result else 空结果)跑一次真实输出大概是这样结构校验: True 首行样例: {id: 1, name: 张三, certificate_no: 20200317001}如果查询结果为空result是[]校验也通过但result[0]会 IndexError所以打印样例前要判空。这一步能提前拦住「返回了元组列表却当成字典用」的低级错误。6. 本篇常见错排查6.1 报错tuple object has no attribute get说明你拿到的是元组列表却按字典用了。检查连接是否漏了cursorclassDictCursor或者转换那步没执行。用第 5 节的validate_dict_array一测就现形。6.2 中文乱码连接charset写utf8有时不够改成utf8mb4。另外确认表本身的字符集也是utf8mb4否则连接对了、表不对照样乱码。6.3cursor.description为 None只有执行过execute之后description才有值。如果你在execute前就取列名拿到的是None后面zip会报错。顺序必须是execute→ 取description→fetchall。6.4 字段名重复导致覆盖join 查询里两张表都有idDictCursor或zip转字典时后者覆盖前者。解决办法是 SQL 里用别名SELECT a.id AS a_id, b.id AS b_id。6.5 忘记关闭连接用try/finally或with上下文管理确保cursor.close()和conn.close()执行。连接泄漏在长时间运行的脚本里会耗尽连接数。7. 下一步把结果接给模型字典数组拿到后如果你要把它丢给模型做摘要、打标签、生成报告就用第 2 节配好的统一 Key。脚本里读config.toml的[taotoken]段请求发到https://taotoken.net/api模型名按需替换。验证模型是否通直接去模型对话页发一条测试消息最快https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentmodel-chat长期跑编码或 Agent 任务用 Coding Plan 更省心https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcoding-planKey 管理和额度查看在控制台https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentconsole接入细节和参数说明看文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentdoc最后留一个我踩过的坑config.toml里的密码如果含#或TOML 解析会出问题用单引号包裹或转义。数据库连接和模型 Key 都收进配置文件后脚本本身就能干净地只做「查询 → 转字典数组 → 校验 → 下游处理」这一条链路换环境只改配置不改代码。

相关推荐

2026年Hermes Agent/OpenClaw部署新解:华为云2分钟安装与百炼APIKey接入TaoToken配置指南
2026年Hermes Agent/OpenClaw部署新解:华为云2分钟安装与百炼APIKey接入TaoToken配置指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 17:23:11

豆包AI做视频:不会剪辑也能出成片,开源skills安装与实操教程
豆包AI做视频:不会剪辑也能出成片,开源skills安装与实操教程

前几天有位朋友来找我,开口就问:“我完全不会剪辑,真的能用豆包做视频吗?”我说这个问题问反了——你不会剪辑,恰恰是豆包这类AI工作流最有价值的场景。传统视频制作卡在操作门槛上:剪辑软件的时间线、轨道… · 2026/9/26 17:23:11

Claude Code模板库实战:从CLAUDE.md到Slash Command的AI协作工作流
Claude Code模板库实战:从CLAUDE.md到Slash Command的AI协作工作流

先说一个我被逼无奈整理模板库的真实场景。那阵子我手上同时有三四个项目,技术栈不同、代码规范不同、commit信息风格也不同。每天开工第一件事,就是在Claude Code里把这些项目差异重新解释一遍:这个仓库用pnpm、测试是vitest、路由命名要keb… · 2026/9/26 17:23:11

Excel零值显示为0:自定义数字格式实战指南
Excel零值显示为0:自定义数字格式实战指南

1. 这个需求背后藏着Excel里最常被误解的“显示逻辑”你有没有遇到过这样的场景:财务同事发来一份销售报表,所有金额列都设置了“数值格式→小数位数2”,看起来规整漂亮。但当你用SUM函数汇总时,发现总和对不上——明明单元格里显… · 2026/9/26 17:55:25

NetWatch diagnose CLI 实战:run 有界诊断、coverage 审计与 episode 重放的完整运维姿势
NetWatch diagnose CLI 实战:run 有界诊断、coverage 审计与 episode 重放的完整运维姿势

NetWatch diagnose CLI 实战:run 有界诊断、coverage 审计与 episode 重放的完整运维姿势 【免费下载链接】netwatch Real-time network diagnostics in your terminal. One command, zero config, instant visibility. 项目地址: https://gitcode.com/gh_mirrors… · 2026/9/26 17:55:25

校园失物招领系统源码拆解:从SQL到部署一次讲透
校园失物招领系统源码拆解:从SQL到部署一次讲透

简介:一套面向毕业设计、课程设计及大作业场景的校园失物招领系统完整项目包,适合计算机相关专业学生参考学习。系统围绕失物登记、招领匹配、用户管理等典型功能展开,覆盖Web应用从需求分析、数据库设计到编码测试的常用流程。压缩包共631个… · 2026/9/26 17:55:25

Agent Skills设计与实现:用SKILL.md与MCP构建可复用AI Agent能力
Agent Skills设计与实现:用SKILL.md与MCP构建可复用AI Agent能力

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 17:55:13

Nginx重定向完全指南:rewrite、return与301/302实战
Nginx重定向完全指南:rewrite、return与301/302实战

1. 先弄清楚:Nginx重定向到底解决什么问题我记得刚接触Nginx那会儿,对"重定向"的理解就停留在"把用户从一个地址带到另一个地址"这个层面。后来踩的坑多了才发现,重定向这活儿在真实业务里承担的角色远比表面复杂。它至少… · 2026/9/26 17:55:13

Codex控不了浏览器?MCP与CDP链路排查详解
Codex控不了浏览器?MCP与CDP链路排查详解

你问“Codex控不了浏览器”,我第一反应是:先别急着怀疑Codex,也别急着怀疑浏览器,先怀疑中间那个传话的。Codex本身不是一个能直接点按钮的机器人,它是一个会调用工具的智能体。浏览器控制要打通一条很长的链路&#x… · 2026/9/26 17:55:07

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码