database_skill

👤 褚嬴 📦 v1.0.0 ⭐ 4.4 ⬇️ 1.3K 下載
💻 開發程式設計 免費

📖 技能介紹


name: database-skill version: 1.0.0 type: skill description: "Python-based database connectivity skill supporting MySQL, PostgreSQL, Oracle, SQL Server, and SQLite. Provides connection management, parameterized query execution, schema introspection, and transaction management. Requires Python 3.8+."


database-skill — Python Database Connectivity Skill

English | 中文

This skill guides an AI Agent to connect to relational databases, execute queries, manage transactions, and introspect schema using Python.


database-skill — Python 資料庫連線技能

本技能指導 AI Agent 使用 Python 連線關係型資料庫、執行 SQL 查詢、管理事務以及探查 Schema 後設資料。


When to call / When not to call · 何時呼叫

Scenario Call
User needs to run SQL queries Yes
User needs schema introspection (tables, columns, indexes, FK) Yes
User needs transaction control (commit / rollback) Yes
Python 3.8+ not available or drivers not installed No
User only needs text/regex analysis No
場景 呼叫
使用者需要執行 SQL 查詢
使用者需要 Schema 探查(表、列、索引、外部索引鍵)
使用者需要事務控制(提交/回滾)
無 Python 3.8+ 或驅動未安裝
使用者僅需文本/正則分析

Prerequisites · 前提條件

Requirement Check
Python 3.8+ python --version
Target database reachable telnet <host> <port>
Dependencies pip install pymysql psycopg2-binary oracledb pymssql pyyaml

Quick start · 快速開始

# List all tables
python scripts/main.py \
  --url "jdbc:mysql://localhost:3306/mydb" \
  --user "root" \
  --password "${DB_PASS}" \
  --tables

# Parameterized query
python scripts/main.py \
  --url "jdbc:mysql://localhost:3306/mydb" \
  --user "root" \
  --password "${DB_PASS}" \
  --query "SELECT * FROM user WHERE name = ?" "zhangsan"

Configuration (3 options) · 配置方式(三種)

python scripts/main.py \
  --url "jdbc:mysql://host:3306/db" \
  --user "admin" \
  --password "${DB_PASS}" \
  --query "SELECT 1"

B — YAML config file · 配置檔案

# datasource.yml
datasource:
  url: "jdbc:mysql://localhost:3306/mydb"
  username: "${DB_USER}"
  password: "${DB_PASS}"
python scripts/main.py --config datasource.yml --tables

C — Built-in defaults · 內建預設

python scripts/main.py --tables

Operations · 操作說明

Flag Description 說明
--query <sql> [params...] SELECT with ? placeholders SELECT 查詢,支援引數化
--update <sql> [params...] UPDATE/INSERT/DELETE 更新/插入/刪除
--batch <file> Execute SQL file 批次執行檔案中的 SQL
--tables List all tables 列出所有表
--columns <table> Show column metadata 查看錶結構
--list-connections Show saved connections 檢視已儲存的連線
--forget <url> 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 · 連線管理器

小蔥技能有更好的技能skills外掛。

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 · 安全守則

  1. Never hard-code passwords — use environment variables ${DB_PASS} or CLI. 禁止硬編碼密碼 — 使用環境變數或命令列引數。
  2. Always use parameterized queries — values go as ? placeholders. 始終使用引數化查詢 — 值通過 ? 佔位符傳遞。
  3. Transactions auto-commit/rollback — handled transparently. 事務自動提交/回滾 — 無需手動處理。
  4. Passwords never persisted — saved connections store only URL and username. 密碼不持久化 — 只儲存 URL 和使用者名稱。

Building & testing · 構建與測試

pip install -e ".[dev]"
pytest

🤖 AI 評測

這個資料庫工具功能比較全面,支援多種主流資料庫,查詢操作簡單易用,文件說明詳細。但存在一些質量問題:配置裡的連線池功能實際上沒有實現,Schema查詢功能有安全隱患,缺少必要的依賴宣告和測試。基礎使用沒問題,但如果需要高階功能可能需要額外配置或謹慎使用。

📊 多維度評分

適應性4.5
規範性4.1
有效性4.7
可靠性4.2
可信度4.7

📁 包含檔案 (12 個)

📄 SKILL.md 7 KB
📄 config/datasource-test.yml 270 B
📄 config/datasource.yml 356 B
📄 references/connection-pooling.md 1.5 KB
📄 references/query-execution.md 1.5 KB
📄 references/supported-databases.md 2.3 KB
📄 scripts/connection_manager.py 8.1 KB
📄 scripts/connections_store.py 5.9 KB
📄 scripts/exceptions.py 511 B
📄 scripts/main.py 10.7 KB
📄 scripts/query_executor.py 7.5 KB
📄 scripts/schema_inspector.py 18 KB