ARTICLE DETAIL

资讯详情

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

Python 操作 MySQL 建表与插入数据:TaoToken 统一 Key 配置实战

Python 操作 MySQL 建表与插入数据:TaoToken 统一 Key 配置实战 1. 从一段能跑但不敢改的脚本说起Python 操作 MySQL 建表与插入数据几乎是每个后端、数据、自动化脚本方向的人都会遇到的第一道数据库门槛。你可能已经写过类似pymysql.connect(hostlocalhost, userroot, password123456)这样的代码本地跑通了但一旦换台机器、换个项目、多接几个 AI 工具凭证就开始满天飞数据库密码写死在脚本里模型 API Key 又散落在另一个配置文件改一次环境要翻五六个文件。这篇就聚焦两件事用mysql-connector-python把建表和批量插入数据这条链路走扎实同时用 TaoToken 的统一 Key 把多工具调用凭证收拢到一处让数据库连接和模型调用共用一套可复制的配置骨架。适合谁看刚接触 Python MySQL、想搞清executemany到底怎么用的人手里同时跑着数据库脚本和几个 AI 编码工具、被 Key 管理搞烦的人以及想拿一份能直接抄的config.toml骨架的人。下面所有代码我都实际跑过参数、报错、回查动作都会给全你照着改连接信息就能用。2. 为什么选 mysql-connector-python 而不是 pymysql先说驱动选择。网上大量教程用pymysql它确实轻纯 Python 实现pip install pymysql就完事。但如果你要长期维护、要跟 MySQL 8 的新特性打交道mysql-connector-python是 MySQL 官方维护的驱动对caching_sha2_password认证、连接池、executemany的批量优化支持更稳。我试过在 MySQL 8 默认认证方式下用老驱动踩过Authentication plugin caching_sha2_password cannot be loaded的坑换官方驱动直接省掉这步折腾。安装就一行pip install mysql-connector-python装完可以顺手确认版本后面排查问题时有用python -c import mysql.connector; print(mysql.connector.__version__)驱动定了接下来是凭证管理。这里就是 TaoToken 登场的地方——不是让你把数据库密码也塞进 TaoToken而是把多工具调用凭证这件事统一起来数据库连接信息放本地config.toml模型/API 通道的 Key 走 TaoToken 统一管理两边各司其职但配置结构保持一致换项目时只改一个文件。3. TaoToken 前置统一 Key 与 API 通道怎么摆TaoToken 在这里的角色是统一 Key / API 通道管理。你可以把它理解成一个凭证中枢以前你每接一个 AI 工具就要去对应平台申请一个 Key散落在环境变量、.env、脚本常量里现在把通道统一到 TaoToken用一套 Key 体系去管多个工具的调用凭证。官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 。具体到操作你需要先拿到自己的 Key。进控制台创建控制台https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewriteAPI Keys 管理页https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite创建完 Key 之后建议先别急着写进代码而是放进config.toml用环境变量兜底。这样本地开发和部署环境可以共用一份配置模板。如果你只是想先验证 Key 通不通可以直接用模型对话页试一条请求模型对话https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite注意数据库密码和 TaoToken 的 Key 都属于敏感信息别提交到 Git。config.toml加进.gitignore仓库里只留config.example.toml。如果你后面要长期跑编码类任务、Agent 类任务可以了解下 Coding Plan它更适合高频调用场景Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite接入细节和参数说明看文档接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite4. 可复制配置config.toml 骨架 建表 SQL 批量插入脚本4.1 config.toml 骨架先给一份能直接抄的配置骨架。数据库部分和 TaoToken 部分分开写互不干扰# config.toml [mysql] host 127.0.0.1 port 3306 user root password your_db_password database demo_db charset utf8mb4 [taotoken] api_base https://taotoken.net/api api_key sk-your-taotoken-key default_model your-model-name读取配置用 Python 3.11 自带的tomllib不用额外装包import tomllib def load_config(path: str config.toml) - dict: with open(path, rb) as f: return tomllib.load(f) cfg load_config() db_cfg cfg[mysql]4.2 建表 SQL建表语句我习惯单独抽成一个常量方便复用和版本管理。字段类型上score用DECIMAL(3,1)比FLOAT更稳浮点误差在成绩、金额这类场景很烦人CREATE_TABLE_SQL CREATE TABLE IF NOT EXISTS t_student ( sno INT PRIMARY KEY AUTO_INCREMENT, sname VARCHAR(30) NOT NULL, age INT, score DECIMAL(3,1), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; 4.3 连接 建表 批量插入完整脚本下面这份脚本把连接、建表、executemany批量插入、事务提交、异常回滚、资源关闭全串起来。注意executemany的占位符用%s参数传的是列表的列表import mysql.connector from mysql.connector import Error import tomllib def load_config(path: str config.toml) - dict: with open(path, rb) as f: return tomllib.load(f) CREATE_TABLE_SQL CREATE TABLE IF NOT EXISTS t_student ( sno INT PRIMARY KEY AUTO_INCREMENT, sname VARCHAR(30) NOT NULL, age INT, score DECIMAL(3,1), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; INSERT_SQL INSERT INTO t_student (sname, age, score) VALUES (%s, %s, %s) def main(): cfg load_config()[mysql] conn None cur None try: conn mysql.connector.connect( hostcfg[host], portcfg[port], usercfg[user], passwordcfg[password], databasecfg[database], charsetcfg[charset], autocommitFalse, ) cur conn.cursor() cur.execute(CREATE_TABLE_SQL) print(建表成功) rows [ (王五, 20, 85.0), (张三, 18, 20.0), (李四, 19, 23.5), (赵六, 21, 91.0), ] cur.executemany(INSERT_SQL, rows) conn.commit() print(f批量插入成功影响行数{cur.rowcount}) except Error as e: if conn: conn.rollback() print(f执行失败已回滚{e}) finally: if cur: cur.close() if conn and conn.is_connected(): conn.close() if __name__ __main__: main()几个关键点值得单独说。autocommitFalse是显式关掉自动提交这样executemany之后必须手动commit()出错时rollback()才有意义。cur.rowcount在批量插入后返回的是受影响行数可以用来做插入条数校验。finally里先关游标再关连接顺序别反。5. 验证请求与数据回查脚本跑完别急着信print一定要回查数据库。两种方式任选。第一种直接在 Python 里查def verify(conn): cur conn.cursor() cur.execute(SELECT sno, sname, age, score FROM t_student ORDER BY sno) for row in cur.fetchall(): print(row) cur.close()第二种命令行进 MySQL 查mysql -h 127.0.0.1 -P 3306 -u root -p demo_db -e SELECT COUNT(*) AS total FROM t_student;预期结果是total等于你插入的条数比如 4。如果条数对不上先看是不是重复执行了脚本导致AUTO_INCREMENT主键冲突被跳过或者executemany中途异常但没触发回滚。TaoToken 那边的验证同理拿 Key 发一条最小请求确认通道通curl -s https://taotoken.net/api/v1/models \ -H Authorization: Bearer $TAOTOKEN_API_KEY | head -c 300返回里有模型列表就说明 Key 和通道都正常。这一步和数据库回查是同一个思路别信我以为成功了要看真实返回。6. 本篇常见错排查报错一Access denied for user rootlocalhost密码错或用户没权限。先确认config.toml里的密码和实际一致再检查该用户是否允许从当前 host 连接。MySQL 8 里root默认可能只允许localhost用127.0.0.1连有时会被当成远程。报错二Unknown database demo_db库还没建。先手动建库CREATE DATABASE demo_db DEFAULT CHARSET utf8mb4;再跑脚本。报错三Authentication plugin caching_sha2_password cannot be loaded驱动版本太老。升级mysql-connector-python到较新版本即可官方驱动对 MySQL 8 默认认证支持完整。报错四executemany插入后数据没进去八成是忘了commit()。autocommitFalse时所有写操作都在事务里不提交就回滚。检查你的try块里有没有conn.commit()。报错五中文乱码连接参数加charsetutf8mb4建表也指定DEFAULT CHARSETutf8mb4。两边都对齐才不会出现问号。报错六TaoToken 请求 401Key 没带对或已失效。去 API Keys 页面确认 Key 状态注意请求头格式是Authorization: Bearer key别漏了Bearer和空格。7. 把凭证收拢把链路跑顺到这里建表、批量插入、回查、排错这条链路就闭环了。回头看开头那个问题——凭证满天飞——解法其实很朴素数据库连接信息进config.toml模型和 API 通道的 Key 交给 TaoToken 统一管两边都用同一份配置读取逻辑换环境只改一个文件。你接下来要做的无非是把config.toml里的连接信息换成你自己的把 TaoToken 的 Key 填进去然后跑一遍脚本看回查结果。如果你还在选模型、调通道先去模型对话页发一条请求感受下如果是要长期跑编码和 Agent 任务Coding Plan 更合适接入参数和报错对照文档里写得更细。把这几步走完你手里就有了一套能复用的 Python MySQL 统一 Key 的最小工作流后面加表、加字段、加工具都只是在这套骨架上扩。
返回列表