Community寫作與編輯github.com

AngChow/dms-query

连接阿里云 DMS (MySQL) 数据库通用操作 Codex Skill:查询数据、查看表结构、多格式导出、带安全护栏的写操作

dms-query 是什麼?

dms-query is a Codex agent skill that 连接阿里云 DMS (MySQL) 数据库通用操作 Codex Skill:查询数据、查看表结构、多格式导出、带安全护栏的写操作.

相容平台~Claude CodeCodex CLI~Cursor
npx skills add AngChow/dms-query

Installed? Explore more 寫作與編輯 skills: steipete/notion, affaan-m/seo, affaan-m/brand-voice · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

DMS 数据库通用操作 Skill

连接阿里云 DMS (MySQL) 查询与执行数据库数据,内置安全护栏。支持覆盖默认库、便捷命令、多格式导出。

核心安全原则(强制)

  1. 默认只读:未加 --write 时仅执行 SELECT / SHOW / DESCRIBE / EXPLAIN / WITH / USE,脚本自动拦截一切写操作并退出。
  2. 写操作必须二次确认:即使用户明确要求修改/删除数据,也必须走"预览 -> 展示影响 -> 用户确认 -> 执行"四步流程,不得跳过。
  3. 不做超出用户意图的修改:用户只要求"查"时绝不"改";用户要求"改 A"时绝不顺带"改 B"。
  4. 一次只做一件事:每条写操作独立预览、独立确认,不批量执行多条未经逐一确认的写语句。

脚本

{SKILL_DIR} = ~/.codex/skills/dms-query/scripts。主脚本 dms_exec.py

便捷命令

# 列出所有数据库
python3 {SKILL_DIR}/dms_exec.py --databases

# 列出指定库的表(不传库名则用 DMS_DB)
python3 {SKILL_DIR}/dms_exec.py --tables          # 用 DMS_DB 默认库
python3 {SKILL_DIR}/dms_exec.py --tables shop   # 指定库

# 查看表结构
python3 {SKILL_DIR}/dms_exec.py --describe mydb.users
python3 {SKILL_DIR}/dms_exec.py --db shop --describe products

读取 SQL 的三种方式

# 1. 命令行直接传
python3 {SKILL_DIR}/dms_exec.py --sql "SELECT * FROM mydb.users LIMIT 5"

# 2. 从文件读取
python3 {SKILL_DIR}/dms_exec.py --file /path/to/query.sql

# 3. 从 stdin 读取
echo "SHOW DATABASES" | python3 {SKILL_DIR}/dms_exec.py

覆盖默认库

默认连接 DMS_DB 环境变量指定的库。用 --db 可临时覆盖,不影响其他终端:

python3 {SKILL_DIR}/dms_exec.py --db shop --sql "SELECT id, name FROM products LIMIT 10"
python3 {SKILL_DIR}/dms_exec.py --db mydb --tables

导出结果

# 导出 xlsx
python3 {SKILL_DIR}/dms_exec.py --sql "SELECT ..." -o result.xlsx

# 导出 csv
python3 {SKILL_DIR}/dms_exec.py --sql "SELECT ..." -o result.csv

# 导出 json(数组对象格式)
python3 {SKILL_DIR}/dms_exec.py --sql "SELECT ..." -o result.json

# TSV 原始输出(适合管道处理,不导出文件)
python3 {SKILL_DIR}/dms_exec.py --sql "SELECT ..." --raw

--display-rows N(默认 200)控制终端打印行数。导出文件时不受此限制。

查询数据(只读)

# 查看所有数据库
python3 {SKILL_DIR}/dms_exec.py --databases

# 查看某个库的表
python3 {SKILL_DIR}/dms_exec.py --tables mydb

# 查看表结构
python3 {SKILL_DIR}/dms_exec.py --describe mydb.users

# 查询数据
python3 {SKILL_DIR}/dms_exec.py --sql "SELECT id, name, email FROM mydb.users LIMIT 10"

# 查看建表语句
python3 {SKILL_DIR}/dms_exec.py --sql "SHOW CREATE TABLE mydb.users"

# 跨库查询(SQL 中用 db.table 全名即可,无需 --db)
python3 {SKILL_DIR}/dms_exec.py --sql "SELECT c.name, COUNT(*) FROM mydb.users u LEFT JOIN shop.companies c ON u.company_id = c.id GROUP BY c.name"

查询大量数据时,在 SQL 中加 LIMIT;如需全量导出,用 -o file.xlsx

运行时错误处理

脚本已内置友好错误提示,执行失败时根据输出判断原因并引导用户:

错误特征原因处理
Can't connect to MySQL server ... (timed out)VPN 未连接提醒用户:"DMS 为内网地址,请先连接公司 VPN 后重试"
缺少 pymysql 模块依赖未安装提示执行 pip3 install pymysql -i https://pypi.tuna.tsinghua.edu.cn/simple
缺少环境变量 DMS_*未配置连接参数提醒用户在 ~/.zshenv 配置 DMS 环境变量后新开终端
拒绝执行写操作未加 --write正常拦截,按写操作确认流程处理

脚本输出已包含排查建议,可直接转述给用户。无需自行猜测原因。

写操作确认流程(强制,不可跳过)

当用户明确要求修改/删除/创建数据时,必须按以下四步执行:

Step 1 - 生成预览(dry-run)

python3 {SKILL_DIR}/dms_exec.py --sql "<写操作SQL>" --write

脚本默认 dry-run:对 DML 用事务执行后 ROLLBACK 获取精确受影响行数,并 SELECT 预览受影响行;对 INSERT 展示目标表、列、值;对 DDL 给出影响说明。不实际修改数据。

Step 2 - 向用户展示影响范围

基于预览输出,用中文向用户清晰说明:

  • 操作类型:INSERT / UPDATE / DELETE / DDL(具体哪种)
  • 目标表:涉及的表名
  • 影响行数:多少行会被修改/删除/插入
  • 具体改动
    • UPDATE:哪些字段从什么值改成什么值(展示预览行)
    • DELETE:将删除哪些行(展示预览行)
    • INSERT:将插入什么数据(展示列和值)
    • DDL:结构变更的具体内容
  • 是否可逆:DROP/TRUNCATE 不可逆,需特别强调
  • 无 WHERE 警告:若 UPDATE/DELETE 无 WHERE 子句,必须强调"将影响全表"

Step 3 - 等待用户明确确认

用户必须回复肯定语义("确认" / "执行" / "没问题" 等)。不得自行判断"用户应该是同意的"而跳过。 如果用户犹豫或提出修改,回到 Step 1 重新预览。

Step 4 - 执行

python3 {SKILL_DIR}/dms_exec.py --sql "<写操作SQL>" --write --confirm

执行后报告受影响行数。

流程示例

用户说:"把 users 表里 feedback_type 为 2 的记录的 feedback 字段更新为 '已处理'"

# Step 1: 预览
python3 {SKILL_DIR}/dms_exec.py \
  --sql "UPDATE mydb.users SET feedback = '已处理' WHERE feedback_type = 2" \
  --write

# Step 2: 展示预览结果给用户(受影响行数、预览行、不可逆性)
# Step 3: 等待用户确认
# Step 4: 确认后执行
python3 {SKILL_DIR}/dms_exec.py \
  --sql "UPDATE mydb.users SET feedback = '已处理' WHERE feedback_type = 2" \
  --write --confirm

参数速查

参数说明
--sql "..."直接传 SQL
--file / -f PATH从文件读取 SQL
--db NAME覆盖默认库名(DMS_DB)
--databases列出所有库
--tables [DB]列出表(可选库名)
--describe TABLE查看表结构
-o FILE导出 xlsx/csv/json
--rawTSV 原始输出
--display-rows N终端显示行数(默认 200)
--timeout N连接超时秒数(默认 15)
--write允许写操作
--confirm确认执行写操作(需配合 --write)

完成后

  • 查询操作:报告行数与关键数据摘要(或导出文件路径)。
  • 写操作:报告受影响行数及操作结果。

相關技能

steipete/notion

Notion CLI/API for pages, Markdown content, data sources, files, comments, search, Workers, and raw API calls.

community

affaan-m/seo

Audit, plan, and implement SEO improvements across technical SEO, on-page optimization, structured data, Core Web Vitals, and content strategy. Use when the user wants better search visibility, SEO remediation, schema markup, sitemap/robots work, or keyword mapping.

community

affaan-m/brand-voice

Build a source-derived writing style profile from real posts, essays, launch notes, docs, or site copy, then reuse that profile across content, outreach, and social workflows. Use when the user wants voice consistency without generic AI writing tropes.

community

affaan-m/crosspost

Multi-platform content distribution across X, LinkedIn, Threads, and Bluesky. Adapts content per platform using content-engine patterns. Never posts identical content cross-platform. Use when the user wants to distribute content across social platforms.

community

affaan-m/x-api

X/Twitter API integration for posting tweets, threads, reading timelines, search, and analytics. Covers OAuth auth patterns, rate limits, and platform-native content posting. Use when the user wants to interact with X programmatically.

community

affaan-m/content-engine

Create platform-native content systems for X, LinkedIn, TikTok, YouTube, newsletters, and repurposed multi-platform campaigns. Use when the user wants social posts, threads, scripts, content calendars, or one source asset adapted cleanly across platforms.

community