sql-explain
分析SQL查询执行计划并提供优化建议,支持PostgreSQL/MySQL/SQLite。
下载 518
提供 SQLite 数据库的创建、查询、修改等操作能力。
openclaw skills install @openlark/sqlite-client命令、参数、文件名以原文为准
使用 sqlite(v5+)和 sqlite3 库操作 SQLite 数据库。所有 API 都返回 ES6 Promise,支持 async/await。
.db 文件的内容在执行任何数据库操作之前,请确保项目已安装所需依赖:
npm install sqlite3 sqliteconst sqlite3 = require('sqlite3')
const { open } = require('sqlite')
async function getDb() {
return open({
filename: './data.db', // 文件路径,或使用 ':memory:' 创建内存数据库
driver: sqlite3.Database
})
}driver: sqlite3.cached.Database // 对同一文件复用连接await db.close()await db.exec('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, email TEXT)')
await db.exec(`INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com')`)const row = await db.get('SELECT * FROM users WHERE id = ?', [1])
// row = { id: 1, name: 'Alice', email: 'alice@example.com' }(若未找到则为 undefined)const rows = await db.all('SELECT * FROM users WHERE name LIKE ?', ['%li%'])
// rows = [{ id: 1, name: 'Alice', ... }]const result = await db.run('INSERT INTO users (name, email) VALUES (?, ?)', ['Bob', 'bob@example.com'])
// result.lastID → 新行的 ID
// result.changes → 受影响的行数const result = await db.run('UPDATE users SET name = ? WHERE id = ?', ['Bob Updated', 2])
// result.changes → 受影响的行数
await db.run('DELETE FROM users WHERE id = ?', [2])await db.get('SELECT * FROM users WHERE name = :name', { ':name': 'Alice' })
await db.run('INSERT INTO users (name, email) VALUES (:name, :email)', { ':name': 'Carol', ':email': 'carol@example.com' })const stmt = await db.prepare('INSERT INTO users (name, email) VALUES (?, ?)')
await stmt.run('Dave', 'dave@example.com')
await stmt.run('Eve', 'eve@example.com')
await stmt.finalize() // 使用后必须 finalizeconst rowCount = await db.each(
'SELECT * FROM users',
[],
(err, row) => {
if (err) throw err
console.log(row.name)
}
)
// rowCount → 处理的总行数在项目目录下创建 migrations/ 文件夹,将 SQL 文件按顺序命名(例如 001-init.sql),然后执行:
await db.migrate({
force: false, // 若为 true,则回滚并重新应用最新的迁移
table: 'migrations', // 迁移记录表的名称
migrationsPath: './migrations' // 迁移文件所在路径
})迁移文件示例 migrations/001-init.sql:
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);读取 .db 文件内容的常见模式:
// 列出所有表
const tables = await db.all("SELECT name FROM sqlite_master WHERE type='table'")
// 获取表结构
const info = await db.all(`PRAGMA table_info(${tableName})`)
// 获取行数
const { count } = await db.get(`SELECT COUNT(*) as count FROM ${tableName}`)const sqlite3 = require('sqlite3')
sqlite3.verbose() // 启用详细日志
db.on('trace', (sql) => {
console.log('SQL:', sql)
})open() 返回的 db 对象封装了 sqlite3.Database,所有方法均返回 Promise。db.exec() 用于执行多条 SQL 语句(无返回值);db.run() 用于单次写操作。finalize(),以防止内存泄漏。await db.exec('PRAGMA journal_mode=WAL')有关详细的 API 文档和更多使用模式,请参见 [references/api.md](references/api.md)。
已收录 1 个 Skill