ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Python 数据库操作获取数据表数据:用 pymysql 配 TaoToken 的 settings.json 骨架与验证

Python 数据库操作获取数据表数据:用 pymysql 配 TaoToken 的 settings.json 骨架与验证 1. 从一段能跑但不好维护的取数脚本说起Python 数据库操作获取数据表数据说白了就是三件事连上库、发 SQL、把结果拿回来。很多人第一次写 pymysql 取数都是照着一段十几行的脚本抄pymysql.connect(...)里硬编码 host、user、passwordcursor.execute(select * from 表名)一把梭跑通了就丢进项目里。问题是这段代码能跑但不好维护——换台机器要改密码换个环境要改端口AI 辅助编码时把这段贴给模型模型还得反问你账号密码是什么。这篇聚焦的场景很具体本地脚本 AI 辅助编码。你要做的是让 Python 通过 pymysql 稳定读取数据表数据同时把连接参数、模型调用通道这些配置类的东西抽出来统一放进一个settings.json骨架里。这样脚本本身只关心业务逻辑配置交给文件AI 帮你改代码时也不会把敏感信息写进源码。适合谁看写过一点 Python、知道pip install怎么用、但还没系统整理过配置管理的同学或者已经在用 AI 辅助写代码想让模型帮你生成取数脚本、又不想每次手动补连接串的人。下面我会给出可复制的settings.json骨架含 TaoToken 统一 Key/API 通道接入点、pymysql 取数示例以及连接测试、表数据读取、结果校验三步验证动作。跟着做十分钟内能跑通整条链路。2. 前置准备TaoToken 通道与 pymysql 环境在写代码之前先把两样东西备齐一个是数据库连接信息一个是 AI 辅助编码时用的模型调用通道。前者你本地 MySQL 或测试库应该已经有了后者我用 TaoToken 来做统一接入——它的作用是把模型调用的 Key 和 API 地址收敛到一个入口脚本里读配置就行不用到处散落。TaoToken 的官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基地址是 https://taotoken.net/api 。注意 API 地址不带后面那串 UTM 参数配置里写干净的就行。你需要去控制台拿一个 API Key地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite Key 管理页在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。拿到 Key 之后先别急着写进代码我们统一放进settings.json。Python 侧的环境准备就两条命令python -m venv venv source venv/bin/activate # Windows 用 venv\Scripts\activate pip install pymysql如果你还想在脚本里顺带调用模型做数据处理再装一个 OpenAI 兼容的 SDKpip install openaiTaoToken 的 API 是 OpenAI 兼容格式所以用openai这个包就能直接对接把base_url指向 https://taotoken.net/api 即可。这样你的取数脚本和模型调用共用同一份配置骨架维护成本低很多。3. settings.json 配置骨架与 pymysql 取数示例3.1 settings.json 骨架先建一个settings.json把数据库连接和 TaoToken 通道都放进去。注意这是骨架字段名你可以按自己习惯改但结构建议保留{ database: { host: 127.0.0.1, port: 3306, user: your_db_user, password: your_db_password, db: your_database, charset: utf8mb4 }, taotoken: { api_key: sk-你的TaoTokenKey, base_url: https://taotoken.net/api, model: claude-sonnet-4-20250514 }, query: { table: your_table, limit: 100 } }几个要点说明一下。charset建议固定utf8mb4不然中文表数据容易出乱码。taotoken.base_url写 https://taotoken.net/api 不要带 UTM 后缀。query.limit是给取数脚本用的默认条数避免select *把整张大表拉爆内存。注意settings.json里含密码和 Key务必加进.gitignore别提交到仓库。可以再建一个settings.example.json放占位符给协作用。3.2 读取配置的封装写一个config.py把 JSON 读进来import json from pathlib import Path def load_settings(pathsettings.json): with Path(path).open(r, encodingutf-8) as f: return json.load(f) SETTINGS load_settings()这样其他脚本from config import SETTINGS就能拿到配置不用重复读文件。3.3 pymysql 取数示例下面是核心的取数函数相比开头那段硬编码版本这里做了三处改进连接参数从配置读、用with管理游标、异常时打印具体错误而不是裸exceptimport pymysql from config import SETTINGS def fetch_table_data(tableNone, limitNone): db_conf SETTINGS[database] table table or SETTINGS[query][table] limit limit or SETTINGS[query][limit] conn pymysql.connect( hostdb_conf[host], portdb_conf[port], userdb_conf[user], passworddb_conf[password], databasedb_conf[db], charsetdb_conf[charset], cursorclasspymysql.cursors.DictCursor, ) sql fSELECT * FROM {table} LIMIT %s try: with conn.cursor() as cursor: cursor.execute(sql, (limit,)) results cursor.fetchall() return results except pymysql.MySQLError as e: print(f查询失败: {e}) raise finally: conn.close() if __name__ __main__: rows fetch_table_data() print(f共取到 {len(rows)} 行) for row in rows[:3]: print(row)这里用了DictCursor返回的是字典列表比默认的元组可读性好很多。SQL 里表名用反引号包起来避免表名是关键字时出错LIMIT用参数化占位符%s防止拼接注入。3.4 顺带调用模型处理数据如果你想让模型帮忙总结取到的数据可以加一个函数from openai import OpenAI from config import SETTINGS def ask_model(prompt): client OpenAI( api_keySETTINGS[taotoken][api_key], base_urlSETTINGS[taotoken][base_url], ) resp client.chat.completions.create( modelSETTINGS[taotoken][model], messages[{role: user, content: prompt}], ) return resp.choices[0].message.content这样取数和模型调用共用一份settings.json换 Key 或换模型只改一个文件。4. 三步验证连接、取数、结果校验配置写好了不代表能跑通按下面三步逐个验证出问题能快速定位到是哪一环。4.1 第一步连接测试先只验证能不能连上库不查数据import pymysql from config import SETTINGS def test_connection(): db_conf SETTINGS[database] try: conn pymysql.connect( hostdb_conf[host], portdb_conf[port], userdb_conf[user], passworddb_conf[password], databasedb_conf[db], charsetdb_conf[charset], ) with conn.cursor() as cursor: cursor.execute(SELECT VERSION()) version cursor.fetchone() conn.close() print(f连接成功MySQL 版本: {version[0]}) return True except pymysql.MySQLError as e: print(f连接失败: {e}) return False test_connection()跑通会打印类似连接成功MySQL 版本: 8.0.36。如果这一步就报错先别往下走对照第 5 节的排查表处理。4.2 第二步表数据读取连接没问题后调用第 3 节的fetch_table_data()python fetch_data.py预期输出是共取到 N 行加上前三条记录。如果 N 是 0说明表里没数据或者LIMIT条件不对如果报Table doesnt exist检查settings.json里的query.table是否拼错。4.3 第三步结果校验取到数据后做一次结构校验确认字段和行数符合预期rows fetch_table_data() assert isinstance(rows, list), 返回结果不是列表 if rows: first rows[0] print(字段列表:, list(first.keys())) print(首行示例:, first) else: print(表为空跳过字段校验)这一步能帮你发现两类问题一是DictCursor没生效导致返回元组二是字段名和预期不符比如表结构改过。校验通过整条链路就算跑通了。5. 本篇常见错误排查下面这些是我在本地脚本和 AI 辅助编码场景里踩过的坑按报错信息对照处理。报错信息常见原因处理方式Access denied for user账号密码错或该用户没有远程权限核对settings.json的 user/password本地库确认用户 host 是localhost还是%Cant connect to MySQL server on 127.0.0.1MySQL 没启动或端口不对确认服务在跑检查port是否为 3306改过端口要同步Unknown databasedb字段拼错或库不存在用SHOW DATABASES;核对库名Table xxx doesnt exist表名错或没选对库核对query.table确认连的库里有这张表中文乱码字符集不是 utf8mb4连接参数加charsetutf8mb4建表也用 utf8mb4ModuleNotFoundError: No module named pymysql没装依赖或装错虚拟环境激活 venv 后重新pip install pymysql模型调用返回 401TaoToken Key 错或没带Bearer检查api_key是否完整SDK 会自动加 Bearer手写请求要带上模型调用返回 404base_url写错确认是 https://taotoken.net/api 不要带多余路径提示如果连接测试通过但取数报错问题基本在 SQL 或表名如果连接测试就失败问题在配置或网络。先分层定位别一上来就改代码。另外AI 辅助编码时经常遇到模型生成的代码里硬编码了连接串。你可以把settings.json骨架贴给模型明确告诉它连接参数从配置读不要写死生成的代码质量会高很多。模型对话入口在 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewrite 需要长期跑编码任务的话可以看 Coding Plan https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。6. 把配置和取数拆开脚本才活得久回到开头那段硬编码脚本它最大的问题不是语法而是把环境相关和业务相关混在一起。settings.json骨架的价值就在于把 host、port、password、TaoToken Key 这些会变的东西抽出去脚本只留取数逻辑。这样换环境改一个文件AI 帮你改代码也不会误伤配置。如果你还没拿 TaoToken 的 Key去 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 建一个填进settings.json的taotoken.api_key就能跑通第 3.4 节的模型调用。接入细节和参数说明在文档里 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。最后留一个实用习惯每次改完settings.json先跑第 4.1 节的连接测试再跑取数最后跑校验。三步都过再往业务逻辑上加东西。这个顺序能帮你把问题挡在配置层而不是等业务代码报错时再回头翻连接串。
返回列表