
1. Python 连 MySQL 脚本里那些反复出现的配置痛点写 Python 操作 MySQL 的脚本很多人第一步就卡在配置上。PyMySQL 的connect()参数看着简单host、user、passwd、port、db、charset 六个字段但真正落到项目里问题往往不在数据库本身而在于你同时开着好几个工具本地跑脚本用一套连接参数AI 编程助手补全代码时又要单独配一次鉴权换个工具就得重新找 Key、重新填 Base URL。这种重复配置消耗的时间比写 SQL 本身还多。我试过在一个数据清洗项目里同时用 PyMySQL 脚本、SQLAlchemy ORM 和一个 AI 代码补全工具结果三处各存了一份配置改一次数据库密码要同步改三个地方漏一个就报Access denied。后来把 AI 辅助开发这条链路的鉴权统一到一个 Key 上脚本侧只保留数据库连接参数两边职责分开才不再互相干扰。这篇要解决的就是这个场景Python 通过 PyMySQL 或 SQLAlchemy 连接 MySQL 时如何把数据库连接配置和 AI 辅助开发的鉴权配置拆开管理让本地脚本和 AI 编程工具共享同一套 API 通道减少多工具切换时的重复劳动。适合已经会写基础 CRUD、但被多工具配置搞烦的开发者。核心检索词就三个Python 操作 MySQL、PyMySQL 连接配置、AI 辅助开发统一 Key。先说清楚边界数据库连接参数host/user/passwd是 MySQL 自己的事跟 AI 工具无关而 AI 辅助开发需要的 Base URL、API Key、Model ID 是另一套东西。把这两套配置混在一个文件里是后面所有混乱的根源。下面先讲怎么把 AI 侧的前置配置做干净再回到 PyMySQL 的可复制模板。2. TaoToken 前置把 AI 辅助开发的鉴权配置统一起来在动手写数据库脚本之前先把 AI 辅助开发这条链路的入口理清楚。TaoToken 提供的是统一的 API 通道官网地址是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 入口是 https://taotoken.net/api 。它的作用是让你在多个 AI 编程工具之间共用同一套鉴权信息不用每个工具单独申请和填写。你需要准备三样东西业内常说的「三件套」Base URL、API Key、Model ID。Base URL 填https://taotoken.net/apiAPI Key 在控制台的 API Keys 页面生成Model ID 根据你实际要调用的模型填写。这三样在后面的 Claude Code、Cline、Codex 等工具里会反复出现先记牢。生成 Key 的路径是控制台的 API Keys 页面地址是 https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。进去之后新建一个 Key复制出来保存到本地环境变量里不要硬编码进脚本。这一点很关键数据库密码和 API Key 都属于敏感信息统一走环境变量脚本里只读不写。如果你用的是 Claude Code 这类命令行工具接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里面有 Base URL 和 Key 的填写位置说明。Claude Code 的 Anthropic 兼容入口是 https://taotoken.net/ClaudeCodeAnthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaudecodeutm_campaignrewrite 配置时把 Base URL 指向这个地址即可。这里要强调一个容易踩的坑不要把数据库连接信息和 AI 鉴权信息写在同一个.env文件里然后到处复制。建议拆成两个文件.env.db放 MySQL 参数.env.ai放 Base URL 和 Key。脚本加载时按需读取AI 工具只读.env.ai。这样改数据库密码不会影响 AI 工具换 AI 模型也不会动到数据库配置。前置工作做完你手上应该有一个可用的 API Key、一个明确的 Base URL以及一个待连接的 MySQL 实例。接下来进入可复制的配置环节。3. 可复制配置PyMySQL 连接模板与环境变量拆分这一节给出可以直接抄的配置。先建目录结构再写环境变量文件最后写连接模板。目录建议这样组织project/ ├── .env.db # MySQL 连接参数 ├── .env.ai # AI 辅助开发鉴权参数 ├── db_config.py # 读取环境变量并返回连接配置 ├── crud_demo.py # 增删改查示例 └── requirements.txt.env.db文件内容路径与项目根目录一致MYSQL_HOST127.0.0.1 MYSQL_PORT3306 MYSQL_USERyour_user MYSQL_PASSWORDyour_password MYSQL_DByour_database MYSQL_CHARSETutf8mb4.env.ai文件内容注意 Base URL 不带多余斜杠TAOTOKEN_BASE_URLhttps://taotoken.net/api TAOTOKEN_API_KEYsk-你的Key TAOTOKEN_MODEL_ID你的模型ID安装依赖pip install pymysql python-dotenv sqlalchemydb_config.py负责读取.env.db并返回字典供 PyMySQL 和 SQLAlchemy 共用import os from dotenv import load_dotenv load_dotenv(.env.db) def get_mysql_config(): return { host: os.getenv(MYSQL_HOST, 127.0.0.1), port: int(os.getenv(MYSQL_PORT, 3306)), user: os.getenv(MYSQL_USER), password: os.getenv(MYSQL_PASSWORD), database: os.getenv(MYSQL_DB), charset: os.getenv(MYSQL_CHARSET, utf8mb4), }PyMySQL 连接时直接展开这个字典import pymysql from db_config import get_mysql_config conn pymysql.connect(**get_mysql_config())SQLAlchemy 的 URL 拼接也基于同一份配置避免两处写死from sqlalchemy import create_engine from db_config import get_mysql_config cfg get_mysql_config() url ( fmysqlpymysql://{cfg[user]}:{cfg[password]} f{cfg[host]}:{cfg[port]}/{cfg[database]}?charset{cfg[charset]} ) engine create_engine(url, pool_pre_pingTrue)如果你用 Cline 或 Codex 这类工具做 AI 辅助开发它们的配置文件里同样填三件套。以 Codex 的auth.json为例路径通常在用户目录下的配置文件夹内容结构如下{ base_url: https://taotoken.net/api, api_key: sk-你的Key, model: 你的模型ID }Cline 的 MCP 配置里也是同样的三个字段Base URL 填https://taotoken.net/apiKey 填生成的 KeyModel ID 按需选择。这样数据库脚本和 AI 工具各自读各自的配置互不干扰。注意.env.db和.env.ai都要加入.gitignore不要提交到仓库。团队协作时用.env.example做模板。配置写完后下一步是验证连通性。4. 验证请求一条查询确认 MySQL 与 AI 通道都通配置写完不能假设它是对的要用最小请求验证。先验证 MySQL 连通性再验证 AI 通道。MySQL 侧写一个check_db.pyimport pymysql from db_config import get_mysql_config def check_mysql(): conn pymysql.connect(**get_mysql_config()) try: with conn.cursor() as cursor: cursor.execute(SELECT VERSION();) version cursor.fetchone() print(MySQL 版本:, version[0]) cursor.execute(SELECT 1;) print(连通性查询结果:, cursor.fetchone()) finally: conn.close() if __name__ __main__: check_mysql()运行python check_db.py预期输出类似MySQL 版本: 8.0.36 连通性查询结果: (1,)看到(1,)就说明连接参数、字符集、权限都没问题。如果这一步报错先看第 5 节的排查表。接着验证 AI 通道。用 curl 直接打模型对话接口确认 Base URL 和 Key 有效curl -X POST https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: $TAOTOKEN_MODEL_ID, messages: [{role: user, content: 回复 ok}] }返回 JSON 里如果能看到choices字段和内容说明 AI 通道正常。你也可以直接在模型对话页面 https://taotoken.net/model?utm_sourcetaotoken_aicg_blog_endutm_contentmodelutm_campaignrewrite 里发一条消息做可视化验证省去拼 curl 的麻烦。两边都通之后把 CRUD 示例跑一遍。插入、查询、更新、删除各执行一次确认事务提交和游标关闭都正常import pymysql from db_config import get_mysql_config conn pymysql.connect(**get_mysql_config()) try: with conn.cursor() as cursor: cursor.execute( INSERT INTO user (id, name, pwd) VALUES (%s, %s, %s), (1, cc, cui), ) conn.commit() cursor.execute(SELECT * FROM user WHERE id %s, (1,)) print(插入后查询:, cursor.fetchone()) finally: conn.close()批量插入用executemany查询用fetchone、fetchmany、fetchall三种方式各试一次确认返回类型符合预期。这一步跑通说明数据库脚本这条链路完整可用。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth配置和验证过程中报错集中在几个固定位置。下面按真实报错对照排查。401 UnauthorizedAI 通道返回 401通常是 Key 没读到或填错。检查.env.ai里的TAOTOKEN_API_KEY是否被正确加载load_dotenv的路径是否指向了正确文件。如果 Key 前后有空格或换行也会导致鉴权失败。重新在 API Keys 页面生成一个 Key 再试。local proxy failed这个报错一般出现在工具的网络配置层说明请求没有正确到达 Base URL。检查 Base URL 是否写成了https://taotoken.net/api不要多加路径或斜杠。如果工具里同时配了其他网络参数先清空只保留 Base URL 和 Key。reading choices 相关报错返回体里找不到choices字段多半是 Model ID 填错或者请求体格式不对。确认model字段的值和你在控制台看到的模型 ID 完全一致请求体是标准的messages数组结构。用第 4 节的 curl 命令先验证排除脚本封装带来的干扰。OAuth 相关报错部分命令行工具首次运行会走 OAuth 流程如果卡在授权环节检查是否已经通过 API Key 方式配置。Claude Code 的接入方式参考 https://taotoken.net/ClaudeCodeAnthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaudecodeutm_campaignrewrite 按文档填写 Base URL 和 Key不要混用两套鉴权方式。MySQL 侧报错Access denied for user检查用户名密码Unknown database检查 db 名Cant connect to MySQL server检查 host 和 port以及 MySQL 是否允许远程连接。字符集问题表现为中文乱码确认charset是utf8mb4。配置读取顺序问题如果脚本里同时load_dotenv(.env.db)和load_dotenv(.env.ai)注意后加载的不会覆盖已存在的同名变量。两个文件的变量名不要重复数据库用MYSQL_前缀AI 用TAOTOKEN_前缀从命名上就隔离开。排查时优先用最小请求定位MySQL 用SELECT 1AI 用一条回复 ok。最小请求通了再往上套业务逻辑能省很多时间。6. 长期编码与 Agent 场景把统一 Key 用在日常开发流里数据库脚本跑通、AI 通道验证过之后真正省时间的是把这套配置固化到日常开发流里。如果你经常写数据清洗、ETL、后台管理这类需要反复连 MySQL 的脚本同时又在用 AI 辅助补全和生成代码那么统一 Key 的价值会随着工具数量增加而放大。对于长期编码和 Agent 类场景可以考虑 Coding Plan地址是 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。它适合需要持续调用模型、跑自动化任务的开发者把鉴权配置一次做好后面新增工具时只填三件套不用重新走一遍申请流程。日常操作上我习惯把.env.ai放在用户级配置目录项目里的.env.db各自独立。这样换项目时数据库配置跟着项目走AI 鉴权保持全局一致。新增一个 AI 编程工具时只需要在它的配置里填 Base URL、Key、Model ID 三个字段几分钟就能接上不用再翻控制台找参数。数据库侧还有一个小技巧把get_mysql_config()做成带缓存的函数避免每次调用都重新读环境变量。对于连接池场景SQLAlchemy 的pool_pre_pingTrue能自动处理断开的连接减少MySQL server has gone away这类报错。如果你在接入过程中遇到鉴权或连通性问题优先看接入文档 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里面按工具分类写了配置位置。需要新建或轮换 Key 时走 API Keys 页面 https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。想先验证模型是否可用直接在模型对话页面发一条消息最快。把数据库连接和 AI 鉴权拆成两套配置、各自用环境变量管理这个习惯一旦养成后面无论加多少工具、换多少模型配置层都不会再乱。脚本该连库连库AI 该补全补全两边互不牵扯这才是统一 Key 真正想解决的问题。