如何通过 MCP 协议让 Claude 直接读写我的本地 SQLite 数据库
我目前用的方案是 modelcontextprotocol/server-sqlite,配置过程其实很简单,但有个细节最关键:路径必须是绝对路径。
配置步骤
如果你用的是 Claude Desktop,直接在 claude_desktop_config.json 里加入这个配置:
{
"mcpServers": {
"sqlite": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-sqlite",
"--db",
"/Users/yourname/projects/my_app/local.db"
]
}
}
}重启 Claude 后,你会发现对话框右下角出现了一个小锤子图标。这时候你直接下指令:“查一下用户表里最近注册的 5 个人”,它会先调用 list_tables 确认表名,再调用 execute_query 执行 SQL,最后把结果直接呈现在对话框里。
实战中的效率提升点
最爽的场景是快速数据清洗。比如我有个本地库里有几千条格式混乱的地址数据,以前得写 Python 脚本跑一遍,现在直接对 Claude 说:
分析 users 表的 address 字段,把所有包含“街道”但没有门牌号的记录找出来,并帮我更新为‘地址缺失’。
它会自动执行 SELECT → 分析结果 → 执行 UPDATE。整个过程不需要我写一行 SQL,而且它能实时看到执行结果,如果报错了它会自己修正 SQL 语句重新跑。
踩过的坑
1. 权限锁死: SQLite 在写入时会产生 -journal 或 -wal 文件。如果在某些同步盘(如 iCloud/OneDrive)目录下,可能会因为文件锁导致 Claude 报错 database is locked。建议把 .db 文件放在纯本地路径。
2. 索引缺失的性能崩盘: 当数据库超过 100MB 时,如果让 Claude 做复杂 Join 查询且没索引,会导致响应极慢甚至超时。建议先手动给常用字段建索引,或者在 Prompt 里明确告诉它:优先通过索引字段查询,不要全表扫描。
3. 破坏性操作: 它是真的能执行 DROP TABLE。为了安全,我习惯给它一个只读的副本,或者在执行大规模更新前,先让它 show me the SQL you are going to run 确认一遍。
全部回复 (0)
还没有回复,来发第一条吧!
