ARTICLE · 1025130
卸载 Navicat,阿里又开源了一款数据库神器,太炸了
连库、查表、改数据,这些谁都能做。我更在意的是:SQL 写到一半能不能补全,看到一坨祖传 SQL 能不能快速看懂,临时查线上数据时,少写几个恶心的 JOIN。
Chat2DB 这东西,我装完之后第一反应就是:有点意思。
它最早从阿里的开源项目体系里出来,定位就是通用数据库客户端。MySQL、PostgreSQL、Oracle、SQL Server、ClickHouse、SQLite、Redis、MongoDB 这些都能接。现在的 Community 版本还把 SQL 工作台、数据编辑、导入导出、AI 助手、MCP 这些东西塞到了一起。
我没急着让它连生产库。
这种新客户端我一般都先拿本地脏数据折腾,权限再大也不给,省得哪天手滑给自己整活。
随手用 Python 造了个 SQLite:
import sqlite3
from pathlib import Path
db_file = Path("payment_debug.db")
records = [
("U1007", "PAY_801", 19900, "FAIL"),
("U1007", "PAY_802", 19900, "FAIL"),
("U2041", "PAY_803", 6800, "SUCCESS"),
("U1007", "PAY_804", 19900, "SUCCESS"),
]
with sqlite3.connect(db_file) as conn:
conn.execute("""
create table if not exists payment_record (
id integer primary key autoincrement,
user_id text not null,
pay_no text not null,
amount_cent integer not null,
state text not null,
created_at datetime default current_timestamp
)
""")
conn.executemany(
"""
insert into payment_record(user_id, pay_no, amount_cent, state)
values (?, ?, ?, ?)
""",
records
)
print(db_file.resolve())
然后 Chat2DB 直接连这个 SQLite 文件。
表、字段、数据先看一遍,基本操作没什么学习成本。真正让我觉得它和普通数据库客户端不太一样的,是右边那个 AI 助手。
比如我想查:
“找出失败支付超过一次的用户,并统计失败金额。”
以前脑子里已经开始 group by、having 了。
现在可以先让它生成 SQL,再自己过一遍条件。
注意,是让它帮我写,不是让它替我执行。
这两个概念差很多。
我最烦现在有些 AI 数据库工具,上来就是“自然语言操作数据库”,听着很猛,真到生产环境我反而不敢用。
AI 写错一条 SELECT,大不了查错。
写错一条 UPDATE 呢?
所以我的习惯一直没变:AI 可以生成,涉及 UPDATE、DELETE,必须自己看 where 条件。生产库最好再把账号权限卡死。
Chat2DB 还有个功能我挺喜欢:SQL 解释。
项目里经常能翻出这种玩意:
legacy_query = """
select user_id, count(*) as fail_count
from payment_record
where state = 'FAIL'
group by user_id
having count(*) > 1
order by fail_count desc
"""
SQL 不算复杂。
但你把场景换成二三十行、套几层子查询、再混几个窗口函数,接手的人看半天很正常。
直接让 AI 解释每一段在干什么,再对着表结构检查,比自己从括号第一层扒到最后一层省事不少。
还有 SQL 优化建议,我的态度倒没那么激动。
它可以给建议,但执行计划还是得自己看。
数据库优化这事,我一直不太信“把 SQL 扔给 AI,一键快十倍”这种玩法。索引有没有命中、扫描多少行、排序有没有落盘、数据分布怎么样,这些东西不看执行计划,光盯着 SQL 文本猜,容易把自己带沟里。
Chat2DB 真让我想替掉 Navicat 的地方,反而不是某一个功能特别炸。
而是查数据、改表、写 SQL、问 AI、导数据,全塞在一个窗口里了。
平时开发联调,这就够用了。
当前 Community 版本还支持自己配置 AI 模型,不是只能绑定某一家模型服务;同时还有 CLI、MCP 这些能力。对喜欢拿 Python 写脚本的人,这个方向我觉得比单纯做个漂亮 GUI 有意思得多。
比如数据库里查完一批异常支付,我经常还会顺手用 Python 再校验一次:
import sqlite3
with sqlite3.connect("payment_debug.db") as conn:
bad_users = conn.execute(
"""
select user_id, count(*) as cnt
from payment_record
where state = ?
group by user_id
having count(*) > ?
""",
("FAIL", 1)
).fetchall()
for user_id, count in bad_users:
print(f"{user_id}: 连续失败记录 {count} 条")
GUI 用来快速看,Python 用来批量处理。
这俩我一般不会二选一。
不过有个地方得单独提醒一下。
Chat2DB 早期版本用过 Apache 2.0,而现在 Community 5.3.0 及之后已经换成了项目自己的 source-available 许可证。个人、本组织内部使用没问题,但你要二次分发、白标、嵌入商业产品,别看见“开源”两个字就直接往公司项目里塞,先把 LICENSE 看完。
至于 Navicat 要不要真卸载?
我电脑上不会马上删。涉及一些用了很多年的操作习惯,我宁愿两个工具并存一阵子。
但如果只是日常开发、连 MySQL、查 PostgreSQL、改几条数据、看表结构、写 SQL,再顺手让 AI 帮我解释一下祖传语句,Chat2DB 已经完全值得占一个 Dock 位置了。
数据库客户端这个赛道,终于不是换个皮继续写 SQL 了。