
1. 从一段 MySQLdb 查询代码说起如果你写过 Python 操作 MySQL大概率见过这种写法MySQLdb.connect(hostlocalhost, userroot, passwdroot, dbtest, charsetutf8)然后cursor.execute(select * from Users)、fetchall()、最后手动close()。这段代码能跑但问题也很明显——插入、更新、删除、查询四段示例全挤在一个文件里连接凭据硬编码在源码里游标和连接几乎没有异常保护一旦中途抛错close()根本执行不到。我最近在整理这类老代码时想换个思路与其自己一行行改不如让 Codex 来帮我重构。但 Codex 要能稳定改代码前提是它的模型通道得先配通。这篇就讲清楚两件事一是把 Codex 接到 TaoToken 通道Base URL 填https://taotoken.net/apiKey 用刚创建的那把二是配好之后让 Codex 对照 MySQLdb 的 connect、cursor、execute、fetchall、close 流程把参数化查询和异常处理补上。适合正在用 MySQLdb 做小项目、又想让 AI 帮忙改代码的 Python 开发者。2. 为什么把 Codex 接到 TaoToken 而不是直接改 MySQLdb先明确一个边界TaoToken 在这里不负责连你的 MySQL也不接管MySQLdb.connect。它只做一件事——给 Codex 提供模型通道的 Key 和 Base URL。也就是说你的数据库还是 localhost/test凭据还是你自己的TaoToken 只是让 Codex 这个改代码的助手能正常响应。这样做的好处是职责清晰。MySQLdb 那层该参数化就参数化该加 try/except 就加 try/exceptCodex 那层只负责理解你的意图、生成改写建议。两者不混在一起排查问题时也不会互相甩锅。具体操作上你需要先拿到一把 Key。打开https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end注册账号在控制台里创建一个 API Key。这把 Key 后面要填进 Codex 的模型通道配置里。注意 Base URL 填https://taotoken.net/api不要加/v1也不要带任何 UTM 参数——这一点很多人第一次配会踩坑加了/v1反而连不上。如果你还想先验证模型通道是否正常可以顺手用一下模型对话页面如果打算长期用 Codex 做编码和 Agent 任务Coding Plan 会更合适。这些入口都在同一个站点里按需取用即可。3. Codex 模型通道的可复制配置下面这部分是纯配置照着填就行。Codex 的模型通道配置一般分三块Base URL、API Key、模型名。Base URL 和 Key 是必填的模型名按你实际使用的填。# Codex 模型通道配置示例环境变量方式 export CODEX_BASE_URLhttps://taotoken.net/api export CODEX_API_KEYsk-你创建的那把Key export CODEX_MODEL你选用的模型名如果你用的是配置文件方式通常长这样{ model_provider: { base_url: https://taotoken.net/api, api_key: sk-你创建的那把Key, model: 你选用的模型名 } }几个关键点再强调一遍。Base URL 结尾不要带/v1TaoToken 的 API 地址就是https://taotoken.net/api。Key 直接从控制台复制别手动改字符。配置改完后重启 Codex 或重新加载配置让环境变量生效。配好之后你可以先在 Codex 里问一句解释一下 MySQLdb 的 connect 和 cursor 流程如果它能正常回复说明通道已经走通了。这一步很关键别急着让它改代码先确认通道没问题否则后面报错你分不清是配置问题还是代码问题。4. 让 Codex 改写 MySQLdb 查询逻辑并验证通道通了之后就可以把原始代码丢给 Codex让它对照改写。原始代码的核心流程是connect建立连接、cursor创建游标、execute执行 SQL、fetchall取结果、close关闭资源。Codex 要做的是把硬编码凭据抽出来、把参数化查询补上、把异常保护加上。你可以这样给 Codex 下指令下面是一段 MySQLdb 操作 Users 表的代码请帮我改写 1. 把连接凭据抽成配置项不要硬编码 2. 查询、插入、更新、删除都改成参数化查询 3. 用 try/except/finally 保证 cursor 和 conn 一定被关闭 4. 保留原有的 fetchall 和字段解包逻辑。Codex 返回的改写结果大致会变成这样# -*- coding: utf-8 -*- import MySQLdb DB_CONFIG { host: localhost, user: root, passwd: root, db: test, charset: utf8, } def query_users(): conn None cursor None try: conn MySQLdb.connect(**DB_CONFIG) cursor conn.cursor() sql select * from Users where id %s cursor.execute(sql, (0,)) rs cursor.fetchall() users [] for id, username, password in rs: print(id : {}, username : {}, password : {}.format(id, username, password)) users.append({id: id, username: username, password: password}) return users except MySQLdb.Error as e: print(数据库操作失败: {}.format(e)) return [] finally: if cursor: cursor.close() if conn: conn.close() if __name__ __main__: result query_users() print(总共有{}人.format(len(result)))对比原版改动集中在三处。凭据从connect参数里挪到了DB_CONFIG字典改环境时只动一处。查询从字符串拼接变成了execute(sql, (0,))这种参数化形式避免注入风险。资源关闭放进了finally不管中间是否抛错cursor和conn都会被释放。验证时先让 Codex 解释这段逻辑确认它理解了fetchall返回的是元组列表、字段顺序是 id/username/password。然后你在本地跑一遍看输出是否和原来一致。如果 Codex 改出来的代码能跑通、输出人数正确说明整条链路——Codex 走 TaoToken 通道、改写 MySQLdb 代码——都通了。5. 本篇常见报错排查配置和改写过程中最容易遇到这几类问题我按出现频率排一下。第一类是 Base URL 写错。有人习惯性在结尾加/v1结果请求 404。TaoToken 的地址就是https://taotoken.net/api不加版本号。也有人把 UTM 参数一起复制进去同样会导致地址不合法。检查方法很简单把 Base URL 单独拿出来看确认没有多余路径和参数。第二类是 Key 无效。常见原因是复制时带了空格或者 Key 被禁用/删除。去控制台重新生成一把替换后重启 Codex。如果还是报鉴权失败确认一下环境变量有没有被其他配置覆盖。第三类是 Codex 能回复但改出来的代码跑不通。这通常不是通道问题而是指令不够具体。比如你只说改一下它可能只改了缩进。把要求列清楚——参数化、异常保护、凭据抽离——它才能改到位。另外MySQLdb 在 Python 3 下需要确认驱动已安装import MySQLdb报错的话先装驱动。第四类是数据库连接本身失败。这跟 TaoToken 无关检查 localhost 的 MySQL 是否启动、test 库和 Users 表是否存在、root 密码是否匹配。把DB_CONFIG里的值逐个核对一遍比盲目改代码有效。6. 配通之后怎么继续用走到这里你应该已经能用 Codex 对照 MySQLdb 的 connect、cursor、execute、fetchall、close 流程把参数化查询和异常处理补上了。后续如果还要接入更多模型能力Key 和 Base URL 的管理入口在 API Keys 页面想先试试模型响应效果模型对话页面可以直接用如果打算把 Codex 长期挂在编码或 Agent 任务上Coding Plan 会更省心。接入细节和参数说明都在接入文档里遇到不确定的字段先去那里核对比在代码里猜要快得多。