DbCls is a powerful database client that combines the functionality of a SQL editor and data visualization tool. It integrates the kaa editor for SQL query editing and the visidata tool for data representation, providing a seamless experience for database management and data analysis.
- SQL query editing with syntax highlighting
- Direct query execution from the editor
- Data visualization with interactive tables
- Support for multiple database engines (MySQL, PostgreSQL, ClickHouse)
- Configuration via command line or config file
- Table schema inspection
- Database and table browsing
- Query history and file-based query storage
pip install dbcls
Basic usage with command line arguments:
dbcls -H 127.0.0.1 -u user -p mypasswd -E mysql -d mydb mydb.sql
Option | Description |
---|---|
-H, --host |
Database host address |
-u, --user |
Database username |
-p, --password |
Database password |
-E, --engine |
Database engine (mysql, postgresql, clickhouse) |
-d, --database |
Database name |
-P, --port |
Port number (optional) |
-c, --config |
Path to configuration file |
You can use a JSON configuration file instead of command line arguments:
dbcls -c config.json mydb.sql
Example config.json
:
{
"host": "127.0.0.1",
"port": "3306",
"username": "user",
"password": "mypasswd",
"dbname": "mydb",
"engine": "mysql"
}
You can also provide configuration directly from a bash script:
#!/bin/bash
CONFIG='{
"host": "127.0.0.1",
"port": "3306",
"username": "user",
"password": "mypasswd",
"dbname": "mydb",
"engine": "mysql"
}'
dbcls -c <(echo "$CONFIG") mydb.sql
Hotkey | Action |
---|---|
Alt + 1 |
Show autocompletion suggestions |
Alt + r |
Execute query under cursor or selected text |
Alt + e |
Show database list with table submenu |
Alt + t |
Show tables list with schema and sample data options |
Ctrl + q |
Quit application |
Ctrl + s |
Save file |
For more kaaedit hotkeys, visit: https://github.com/kaaedit/kaa
Hotkey | Action |
---|---|
zf |
Format current cell (JSON indentation, number prettification) |
For more visidata hotkeys, visit: https://www.visidata.org/man/
Command | Description |
---|---|
.tables |
List all tables in current database |
.databases |
List all available databases |
.use <database> |
Switch to specified database |
.schema <table> |
Display schema for specified table |
- MySQL
- PostgreSQL
- ClickHouse
- SQLite
To ensure password safety, I recommend using the project ssh-crypt to encrypt your config file. This way, you can store your password securely and use it with dbcls.
Caveats:
- If you keep the raw password in a shell script, it will be visible to other users on the system.
- Even if you encrypt your password inside a shell script, if you pass it to dbcls via the command line, it will be visible in the process list.
To avoid this, you can use this technique:
#!/bin/bash
ENC_PASS='{V|B;*R$Ep:HtO~*;QAd?yR#b?V9~a34?!!sxqQT%{!x)bNby^5'
PASS_DEC=`ssh-crypt -d -s $PASS`
CONFIG=`cat << EOF
{
"host": "127.0.0.1",
"username": "user",
"password": "$PASS_DEC",
"dbname": "mydb",
"engine": "mysql"
}
`
dbcls -c <(echo "$CONFIG") mydb.sql
Contributions are welcome! Please feel free to submit a Pull Request or submit an issue on GitHub Issues