--columns | Show column metadata | 查看表结构 | --list-connections | Show saved connections | 查看已保存的连接 |
--forget | Remove a saved connection | 删除已保存的连接 |
Examples · 示例:
python scripts/main.py --url "jdbc:mysql://host:3306/db" --user root --password x --tables
python scripts/main.py --url "..." --user root --password x --query "SELECT * FROM t WHERE id = ?" 42
python scripts/main.py --url "..." --user root --password x --update "UPDATE t SET x = ? WHERE id = ?" "new" 1
python scripts/main.py --list-connections
Scripts · 脚本结构
scripts/
├── main.py # CLI entry point · 命令行入口
├── connection_manager.py # Connect / disconnect · 连接管理
├── connections_store.py # Persist connections · 连接记录持久化
├── query_executor.py # Query, update, batch, transaction · 查询执行
├── schema_inspector.py # Schema introspection · Schema 探查
└── exceptions.py # Exception hierarchy · 异常层次
API overview · API 概览
ConnectionManager · 连接管理器
from connection_manager import ConnectionManager
cm = ConnectionManager(url="jdbc:mysql://localhost:3306/db",
username="root", password="secret",
driver="pymysql")
conn = cm.get_connection() # auto-commit
tx_conn = cm.get_connection_for_transaction() # manual-commit
cm.close_connection(conn)
QueryExecutor · 查询执行器
from query_executor import QueryExecutor
qe = QueryExecutor(cm)
rows = qe.execute_query("SELECT * FROM users WHERE status = ?", "ACTIVE")
affected = qe.execute_update("UPDATE users SET status = ? WHERE id = ?", "INACTIVE", 1)
qe.execute_batch(["INSERT INTO log VALUES (1)", "INSERT INTO log VALUES (2)"])
qe.execute_transaction(lambda tx: (
tx.execute_update("UPDATE accounts SET balance = balance - 100 WHERE id = ?", 1),
tx.execute_update("UPDATE accounts SET balance = balance + 100 WHERE id = ?", 2),
))
CaseInsensitiveDict · 大小写不敏感字典
Query results are wrapped in `CaseInsensitiveDict` so column names are case-insensitive:
查询结果的列名大小写不敏感:
row["name"] == row["NAME"] == row["Name"]
SchemaInspector · Schema 检查器
from schema_inspector import SchemaInspector
si = SchemaInspector(cm)
si.get_tables() # 获取所有表
si.get_columns("users") # 获取表结构
si.get_indexes("users") # 获取索引
si.get_foreign_keys("users") # 获取外键
Saved connections · 连接记录
After a successful connection, the skill saves the URL, username, and driver to
`%TEMP%/.database-skill-connections.json (/tmp/` on Linux/macOS).
Passwords are never stored.
连接成功后,技能会将 URL、用户名和驱动类型保存到用户临时目录。
密码不会被保存。
When no `--url or --config` is provided, the skill shows a numbered list:
不提供 `--url 或 --config` 时,显示已保存的连接供选择:
Saved connections:
[0] MySQL@host1
[1] Oracle@orahost
[N] Enter a new connection
python scripts/main.py --list-connections # 查看所有连接
python scripts/main.py --forget "jdbc:mysql://..." # 删除连接
Security rules · 安全守则
- Never hard-code passwords — use environment variables
${DB_PASS} or CLI.
禁止硬编码密码 — 使用环境变量或命令行参数。
- Always use parameterized queries — values go as
? placeholders.
始终使用参数化查询 — 值通过 ? 占位符传递。
- Transactions auto-commit/rollback — handled transparently.
事务自动提交/回滚 — 无需手动处理。
- Passwords never persisted — saved connections store only URL and username.
密码不持久化 — 只保存 URL 和用户名。
Building & testing · 构建与测试
pip install -e ".[dev]"
pytest
安全检测
腾讯云安全 (Sanbu)
安全,无风险
查看报告
🔗 相关推荐
ai-intelligence
ivangdavila
自我反思+自我批评+自我学习+自组织记忆。智能体评估自身工作、发现错误并持续改进。
★ 1,374
📥 319,974
developer-tools
steipete
使用 `gh` CLI 与 GitHub 交互,通过 `gh issue`、`gh pr`、`gh run` 和 `gh api` 管理议题、PR、CI 运行及高级查询。
★ 674
📥 325,109
ai-intelligence
pskoett
捕获经验教训、错误及修正内容,以实现持续改进。适用于以下场景:(1)命令或操作意外失败;(2)用户纠正Claude(如“不,那不对……”“实际上……”);(3)用户请求的功能不存在;(4)外部API或工具出现故障;(5)Claude发现自身
★ 4,075
📥 807,212