#database-schema #export #mysql #source #connection #shell #sqlite

app dbfish

更好的数据库 CLI 工具。更容易、更快速地导出数据和管理工作。

2 个版本

0.1.1 2019年9月10日
0.1.0 2019年9月10日

#2333数据库接口

MIT 许可证

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