ITADN
jorgerojas26/lazysql
jorgerojas26/lazysql · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

Contributors Forks Stargazers Issues MIT License LinkedIn

LAZYSQL

一个使用 Go 编写的跨平台 TUI 数据库管理工具。

目录
  1. 关于本项目
  2. 功能特性
  3. 快速开始
  4. 使用方法
  5. 命令
  6. 环境变量
  7. 快捷键
  8. 路线图
  9. 贡献指南
  10. 许可证
  11. 联系方式
  12. 致谢

关于本项目

Product Name Screen Shot Product Name Screen Shot

本项目深受 Lazygit 的启发,我认为它是最好的 Git TUI 客户端。

我想要一个类似这样的工具,但用于 SQL。我没有找到符合我需求的工具,所以我自己创建了一个。

我生活在终端中,所以如果你和我一样,这个工具对你也会有用。

这也是我的第一个开源项目,同时这也是我的第一个 Go 项目。我不是一个天才程序员。我只是一个典型的 JavaScript 开发者,想要学习一门新语言,我还想要一个 TUI SQL 客户端,所以 blanca y en botella, leche!(白色且装瓶,牛奶!)。

本项目处于 ALPHA 阶段,请随意抱怨我的意大利面代码。

我在日常工作中使用 Lazysql,我是一名全职的全栈 JavaScript 开发者,目前(有 bug xD)的状态下。因此,计划是在空闲时间作为一个副项目来改进和修复我的小宝贝。

构建工具

Golang Golang

功能

  • 跨平台(macOS, Windows, Linux)
  • Vim 键位绑定
  • 可以管理多个连接(Backspace)
  • 标签页
  • SQL 编辑器(CTRL + e)

快速开始

安装

Homebrew (macOS/Linux)

brew install lazysql

使用 go 包管理器安装

go install github.com/jorgerojas26/lazysql@latest

二进制发布版

对于 Windows、macOS 或 Linux,您可以在此处下载二进制发布版 here

第三方(由社区维护)

Arch Linux 用户可以通过 AUR 安装:

paru -S lazysql

yay -S lazysql

或手动安装,命令如下:

git clone https://aur.archlinux.org/lazysql.git
cd lazysql
makepkg -si

(返回顶部)

配置

如果设置了 XDG_CONFIG_HOME 环境变量,则配置文件将位于:

  • ${XDG_CONFIG_HOME}/lazysql/config.toml

否则,配置文件将位于:

  • Windows: %APPDATA%\lazysql\config.toml
  • macOS: ~/Library/Application Support/lazysql/config.toml
  • Linux: ~/.config/lazysql/config.toml

配置文件是一个 TOML 文件,可用于定义多个连接。

配置示例

[[database]]
Name = 'Production database'
Provider = 'postgres'
DBName = 'foo'
URL = 'postgres://${user}:urlencodedpassword@localhost:${port}/foo'
ReadOnly = true
Commands = [
  { Command = 'ssh -tt remote-bastion -L ${port}:localhost:5432', WaitForPort = '${port}' },
  { Command = 'whoami', SaveOutputTo = 'user' },
]
[[database]]
Name = 'Development database'
Provider = 'postgres'
DBName = 'foo'
URL = 'postgres://postgres:urlencodedpassword@localhost:5432/foo'
[application]
DefaultPageSize = 300
DisableSidebar = false
SidebarOverlay = false
JSONViewerWordWrap = false
EnterOpensJSONViewer = false

ReadOnly 字段(可选,默认为 false)可以设置为 true 以启用连接的只读模式。启用后,所有变更查询(INSERT、UPDATE、DELETE、DROP 等)将被阻止。

[application] 部分用于定义一些应用设置。并非所有设置都已可用,此功能仍在开发中。

应用设置

设置默认值描述
DefaultPageSize300每页获取的记录数
DisableSidebarfalse禁用侧边栏
SidebarOverlayfalse以覆盖层形式显示侧边栏,而非侧面板
JSONViewerWordWrapfalse在 JSON 查看器中启用自动换行
EnterOpensJSONViewerfalse在单元格上按 Enter 键时打开 JSON 查看器

本地配置

您可以在项目目录中(与 .git 文件夹同级)放置一个 .lazysql.toml 文件,以覆盖该项目的全局配置。这对于定义项目特定的数据库连接或设置非常有用。

lazysql 通过从当前工作目录向上遍历来查找 .lazysql.toml。它会在 git 仓库根目录(即找到 .git 的位置)处停止。如果未找到本地配置,则直接使用全局配置。

合并行为:

部分行为
[application]深度合并 — 本地值覆盖全局值,未设置的字段保留全局值/默认值
[[database]]替换 — 本地连接完全替换全局连接
[keymap.*]深度合并 — 本地键绑定针对同一命令覆盖全局键绑定

示例 .lazysql.toml:

[application]
DefaultPageSize = 500

[[database]]
Name = 'Local development'
Provider = 'postgres'
URL = 'postgres://localhost/myproject_dev'

使用此本地配置时,DefaultPageSize 会覆盖全局值,并且只有 Local development 连接可用(全局连接将被替换)。

环境变量(${env:VAR_NAME})在本地配置文件中与在全局配置中一样有效。

注意:当找到本地 .lazysql.toml 时,从 UI 修改连接时,完整配置将保存到本地文件中。

用法

? 查看键盘快捷键列表

使用以下命令打开 TUI:

$ lazysql

启动 lazysql 并允许从已保存的连接中进行选择。

$ lazysql [connection_url]

启动 lazysql 并连接到 [connection_url] 处的数据库。

$ lazysql --read-only [connection_url]

以只读模式启动 lazysql。

连接到数据库

  1. Start lazysql
  2. Create a new connection (press n)
  3. Provide a name for the connection as well as the URL to connect to (see example connection URL)
  4. Connect to the DB (press <Enter>)

If you already have a connection set up:

  1. Start lazysql
  2. Select the right connection (press j and h for navigation)
  3. Connect to the DB (press c or <Enter>)

创建一个表

目前无法从 TUI 创建表。 但你可以将创建表的查询作为 SQL-Query 运行, 在 SQL Editor 中。

你可以通过按下 R 来更新树,从而查看你新创建的表。

执行 SQL 查询

  1. <Ctrl+E> 打开内置的 SQL Editor
  2. 编写 SQL 查询
  3. <Ctrl+R> 执行 SQL 查询

H 可切换回表格树

执行 SELECT 查询后,SQL 编辑器下方将显示包含查询结果的表格。
/ 可将焦点切换回 SQL 编辑器

打开/查看表

  1. Expand the table-tree by pressing e or <Enter>
  2. Select the table you want to view
    • next node j
    • previous node k
    • last node G
    • first node g
  3. Press <Enter> to open the table

H 返回表格树
L 返回表格

筛选行

  1. Open a table
  2. Press / to focus the filter input
  3. Write a WHERE-clause to filter the table
  4. Press <Enter> to submit your filter

要移除筛选器,请聚焦筛选器输入框(按 /)并按 <Esc>

插入一行

  1. Open a table
  2. Press 1 to switch to the record tab
  3. Press o to insert a new row
  4. Fill out all columns
  5. Press <Ctrl+S> to save the changes

编辑列

  1. Open a table
  2. Press 1 to switch to the record tab
  3. Move to the column you want to edit
  4. Press c to edit, Press <Enter> to submit
  5. Press <Ctrl+S> to save the changes

导出为 CSV

从表格视图

  1. Open a table
  2. Apply filters or sorting as needed
  3. Press E to open the export dialog
  4. Optionally modify the file path and batch size
  5. Select export scope:
    • Export Current Page: Export only the currently displayed rows
    • Export All Records: Fetch and export all records from the table

批处理大小(默认值:10000):在导出所有记录时,数据将分批获取,以避免大表出现超时或内存问题。增大该值可加快导出速度,若遇到任何错误则应减小该值。

默认文件路径为 ~/Downloads/{database}_{table}_{timestamp}.csv

来自 SQL 编辑器

  1. Execute a SQL query
  2. Press E to open the export dialog
  3. Optionally modify the file path
  4. Select Export to save all query results

(返回顶部)

支持

  • MySQL
  • PostgreSQL
  • SQLite
  • MSSQL
  • MongoDB

对多种 RDBMS 的支持正在开发中。

命令

在某些情况下,尤其是在连接远程数据库时,可能需要在能够连接数据库之前运行自定义命令。 例如,当你只能通过远程堡垒机访问数据库时,你可能需要先在一个单独的终端中运行以下命令 来打开一个 SSH 隧道:

ssh remote-bastion -L 5432:localhost:5432

为了更轻松地运行这些命令,lazysql 支持在连接到数据库之前运行自定义命令。您可以在配置文件中像这样定义这些命令:

[[database]]
Name = 'server'
Provider = 'postgres'
DBName = 'foo'
URL = 'postgres://${user}:password@localhost:${port}/foo'
Commands = [
  { Command = 'ssh -tt remote-bastion -L ${port}:localhost:5432', WaitForPort = '${port}' },
  { Command = 'whoami', SaveOutputTo = 'user' },
]

Command 字段是必需的,可以包含任何你通常在终端中运行的命令。 WaitForPort 字段是可选的,可用于在继续之前等待特定端口打开。 SaveOutputTo 字段是可选的,可用于创建用户定义的变量。命令的输出(stdout)将被保存到变量中,并且可以通过 ${VARIABLE} 语法在 URL 或后续命令中使用该变量。

当你在 URL 字段中定义 ${port} 变量时,lazysql 会自动将其替换为一个随机的 空闲端口号。然后,该端口号将用于连接 URL,并可在 Commands 字段中使用,以便你配置命令。

你甚至可以链接命令,例如,先连接到远程服务器,然后连接到在远程 k8s 集群中运行的 postgres 容器:

[[database]]
Name = 'container'
Provider = 'postgres'
DBName = 'foo'
URL = 'postgres://postgres:password@localhost:${port}/foo'
Commands = [
  { Command = 'ssh -tt remote-bastion -L 6443:localhost:6443', WaitForPort = '6443' },
  { Command = 'kubectl port-forward service/postgres ${port}:5432 --kubeconfig /path/to/kube.conf', WaitForPort = '${port}' }
]

环境变量

你可以在配置文件中使用 ${env:VAR_NAME} 语法来使用环境变量。这对于将密码等敏感信息排除在配置文件之外非常有用。

[[database]]
Name = 'Production'
Provider = 'postgres'
URL = 'postgres://${env:DB_USER}:${env:DB_PASSWORD}@localhost:5432/mydb'
export DB_USER=admin
export DB_PASSWORD=secret
lazysql

注意:未定义的环境变量将被替换为空字符串。

键位绑定

自定义键位绑定

你可以通过在 config.toml 文件中添加一个 [keymap.<Group>] 部分来自定义键位绑定。每个条目将一个命令名称映射到一个按键。

[keymap.Home]
SwitchToEditorView = "i"
Quit = "Esc"

[keymap.Tree]
GotoTop = "t"
Search = "Ctrl-F"

对于单字符键,直接使用字符(例如,"q""G""1""/")。对于特殊键,使用 tcell 键名(例如,"Enter""Esc""Ctrl-S")。仅支持 tcell 中定义的键名。

组名不区分大小写(HomehomeHOME 均可使用)。

可用组:HomeConnectionTreeTreeFilterTableEditorSidebarQueryPreviewQueryHistoryJSONViewer

默认键绑定

主界面

默认键命令描述
LMoveRight聚焦表格
HMoveLeft聚焦树
Ctrl-ESwitchToEditorView打开 SQL 编辑器
Ctrl-SSave执行待处理的更改
qQuit退出
BackspaceSwitchToConnectionsView切换到连接列表
?HelpPopup帮助
Ctrl-PSearchGlobal全局搜索
Ctrl-_ToggleQueryHistory切换查询历史模态框
TToggleTree切换文件树

连接

默认键命令描述
nNewConnection创建新的数据库连接
cConnect连接到数据库
EnterConnect连接到数据库
eEditConnection编辑数据库连接
dDeleteConnection删除数据库连接
qQuit退出

默认按键命令描述
gGotoTop跳转到顶部
GGotoBottom跳转到底部
EnterExecute打开
jMoveDown向下移动
DownMoveDown向下移动
Ctrl-UPagePrev向上翻页
Ctrl-DPageNext向下翻页
kMoveUp向上移动
UpMoveUp向上移动
/Search搜索
nNextFoundNode跳转到下一个找到的节点
NPreviousFoundNode跳转到上一个找到的节点
pPreviousFoundNode跳转到上一个找到的节点
PNextFoundNode跳转到下一个找到的节点
cTreeCollapseAll折叠全部
eExpandAll展开全部
RRefresh刷新树

树过滤器

默认按键命令描述
EscUnfocusTreeFilter取消树过滤器焦点
EnterCommitTreeFilter提交树过滤器搜索

表格

默认按键命令描述
/Search搜索
cEdit修改单元格
dDelete删除行
wGotoNext跳转到下一个单元格
bGotoPrev跳转到上一个单元格
$GotoEnd跳转到最后一个单元格
0GotoStart跳转到第一个单元格
yCopy复制单元格值到剪贴板
oAppendNewRow追加新行
ODuplicateRow复制行
JSortDesc降序排序
RRefresh刷新当前表格
KSortAsc升序排序
CSetValue切换值菜单 (NULL, EMPTY, DEFAULT)
[TabPrev切换到上一个标签页
]TabNext切换到下一个标签页
{TabFirst切换到第一个标签页
}TabLast切换到最后一个标签页
XTabClose关闭标签页
>PageNext切换到下一页
<PagePrev切换到上一页
1RecordsMenu切换到记录菜单
2ColumnsMenu切换到列菜单
3ConstraintsMenu切换到约束菜单
4ForeignKeysMenu切换到外键菜单
5IndexesMenu切换到索引菜单
SToggleSidebar切换侧边栏
sFocusSidebar聚焦侧边栏
ZShowRowJSONViewer切换行的 JSON 查看器
zShowCellJSONViewer切换单元格的 JSON 查看器
EExportCSV导出为 CSV

编辑器

默认按键命令描述
Ctrl-RExecute执行查询
EscUnfocusEditor取消编辑器焦点
Ctrl-SpaceOpenInExternalEditor在外部编辑器中打开

可以通过 $SQL_EDITOR 为 lazysql 设置特定的编辑器。

JSON 查看器

按键操作
w切换自动换行
y复制到剪贴板
z/Z关闭查看器

可以通过在表格单元格上按 z(单元格)或 Z(行)来打开 JSON 查看器。如果启用了 EnterOpensJSONViewer,在单元格上按 Enter 键也会打开 JSON 查看器。

侧边栏

默认按键命令描述
sUnfocusSidebar聚焦表格
SToggleSidebar切换侧边栏
jMoveDown聚焦下一个字段
kMoveUp聚焦上一个字段
gGotoStart聚焦第一个字段
GGotoEnd聚焦最后一个字段
cEdit编辑字段
EnterCommitEdit将编辑添加到待处理更改
EscDiscardEdit放弃编辑
CSetValue切换值菜单(NULL、EMPTY、DEFAULT)
yCopy复制值到剪贴板

查询预览

默认按键命令描述
Ctrl-SSave执行查询
qQuit退出
yCopy复制查询到剪贴板
dDelete删除查询

查询历史

默认按键命令描述
sSave保存查询
dDelete删除查询
qQuit退出
yCopy复制查询到剪贴板
/Search搜索
Ctrl-_ToggleQueryHistory切换查询历史模态框
[TabPrev切换到上一个标签页
]TabNext切换到下一个标签页

JSON Viewer

默认按键命令描述
ZShowRowJSONViewer切换 JSON 查看器
zShowCellJSONViewer切换 JSON 查看器
yCopy复制值到剪贴板
wToggleJSONViewerWrap切换自动换行

External Editor

外部编辑器功能(SQL 编辑器中为 CTRL + Space,表格中为 CTRL + o)使用以下环境变量来确定要使用的编辑器:

  • SQL Editor: $SQL_EDITOR > $EDITOR > $VISUAL > vi
  • Table cells: $EDITOR > $VISUAL > vi

此功能仅在 Linux 和 macOS 上可用。

Example connection URLs

postgres://user:pass@localhost/dbname
pg://user:pass@localhost/dbname?sslmode=disable
mysql://user:pass@localhost/dbname
mysql:/var/run/mysqld/mysqld.sock
sqlserver://user:pass@remote-host.com/dbname
mssql://user:pass@remote-host.com/instance/dbname
ms://user:pass@remote-host.com:port/instance/dbname?keepAlive=10
oracle://user:pass@somehost.com/sid
sap://user:pass@localhost/dbname
file:myfile.sqlite3?loc=auto
/path/to/sqlite/file/test.db
odbc+postgres://user:pass@localhost:port/dbname?option1=

路线图

  • 支持 NoSQL 数据库
  • 通过 TUI 创建列和索引
  • 表树输入过滤器
  • 自定义键绑定
  • 在模态框中显示键绑定
  • 重写行 createupdatedelete 的逻辑

查看 未解决的问题 以获取完整的功能提案列表(以及已知问题)。

(返回顶部)

剪贴板支持

我们使用 atotto/clipboard 来复制到剪贴板。

平台:

  • OSX
  • Windows 7(可能适用于其他 Windows 版本)
  • Linux、Unix(需要安装 'xclip' 或 'xsel' 命令)

贡献

欢迎提交贡献、问题和拉取请求!

(返回顶部)

许可证

依据 MIT 许可证分发。更多信息请参阅 LICENSE.txt

(返回顶部)

联系方式

Jorge Rojas - LinkedIn - jorgeluisrojasb@gmail.com

(返回顶部)

替代方案

(返回顶部)

星标历史

Star History Chart