2 个版本
0.1.1 | 2019年9月10日 |
---|---|
0.1.0 | 2019年9月10日 |
#2333 在 数据库接口
160KB
3.5K SLoC
dbfish
Dbfish 旨在成为您的标准数据库工具,就像 Fish 是 Bash 一样:提供更多开箱即用的功能,外观更好,使用更简单。
主要功能
- 将数据导出为 CSV、HTML、JSON、文本、SQLite 格式
- 管理数据库凭据
- 跳转到数据库 shell
- 跳转到已为您设置连接的 Python 环境
- 使用一条命令显示和搜索数据库模式
目前它可以从关系数据库导出到 CSV/HTML/文本/SQLite 文件等。我创建这个工具是因为我对开箱即用的数据库工具的可用性和功能感到沮丧。说真的,psql 和 mysql 客户端应该很久以前就能做到这些。
用法
# define data source named "mydata" which will connect to a database you use
dbfish source add mydata mysql --user joe --password secret
dbfish source add mydata postgres --user joe --password secret
dbfish source add mydata sqlite /tmp/somefile.sqlite3
dbfish export SOURCE [source options] DESTINATION [destination options]
dbfish export mydata -q 'select * from sometable' html /tmp/output.html
dbfish export mydata -q 'select * from sometable' csv /tmp/output.csv
dbfish export mydata -q 'select * from sometable' json /tmp/output.json
dbfish help
dbfish shell [--client CLIENT] SOURCE # jump to shell, dbfish supports mysql, psql, python, litecli/mycli/pgcli, sqlite
dbfish shell mydata # use default shell
dbfish shell -c mycli mydata # use mycli shell
dbfish shell -c python mydata # use ipython as shell
Variables and functions:
conn: database connection
cursor: connection cursor
get_conn(): obtain database connection
msg: function printing this message
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.4.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: conn.execute('select * from sometable')
dbfish schema SOURCE [source options] # display database schema
dbfish schema -q user SOURCE [source options] # display all parts of database schema that contain phrase "user"
dbfish schema -r -q '201[89]' SOURCE [source options] # display all parts of database schema that contain 2018 or 2019
dbfish sources add | edit | list | remove # manage database credential
来源
- MySQL
- PostgreSQL
- SQLite
目标
- CSV
- HTML(使用 Bootstrap 精心完成)
- ODS(ODS 电子表格)
- SQLite 文件
- 文本(经典表格)
- 文本-垂直(每列占一行)
- XLSX(Excel 电子表格)
示例
dbfish export mysql --database users -q 'select * from users' csv somefile.csv
dbfish export mysql --database users --user joe --password secret -q 'select * from users' sqlite -f somefile.sqlite
高级功能
- 管理数据库凭据(dbfish 源添加 mydata sqlite -f my_favourite_file.sqlite; dbfish export mydata ...)
- 进度条
- 颜色支持
- 截断长文本
- 显示数据库模式(
dbfish schema mydata
) - 可以编译成无依赖项的单个二进制文件(使用 musl 静态链接)
- 使用 Python 或 mycli 作为 shell
TODO:(在称为可用之前必须完成)
- 有用的错误信息
- 消除大部分 .unwrap()
- 调试来源和目标
- 测试
TODO:(最好有)
- 更多来源(CSV、BigQuery、也许 JSON/Solr/ES/MongoDB)
- 更多目标(HDF5)
- 支持更多 MySQL 和 PostgreSQL 功能(省略了一些类型)
- 消除所有 .unwrap()
- 压缩为 zip/tgz(对 csv/text/html 很有用)
- 性能(不是优先事项,但最好有)
- 有一个源提供者的概念,以便与框架集成
设计原则
- 保持简单。这不是一个完美翻译每个数据库每个功能的工具。
- 详细错误。如果有什么不工作,请说出来。默默忍受错误是不可接受的。
开发
您需要 Rust。我建议使用最新稳定版本。一旦拥有它,运行 cargo build --release 应该就能正常工作,生成 target/release/dbfish 二进制文件。您还需要安装 SQLite3 库和 C 编译器,因为它是静态构建和链接的,如果这对您来说是个问题,请禁用 use_sqlite 功能。
如果您想静态链接它,请安装 musl 和 musl-dev,并遵循 此指南。
依赖项
~8–24MB
~330K SLoC