redasql


Nameredasql JSON
Version 2.7.0 PyPI version JSON
download
home_pagehttps://github.com/denzow/redasql
Summary
upload_time2023-12-14 05:06:30
maintainer
docs_urlNone
authordenzow
requires_python>=3.8,<4.0
licenseMIT
keywords redash sql
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # RedaSQL
![redasql](https://user-images.githubusercontent.com/4572217/138800787-b9525acd-8ab1-4f35-a762-948244b9caee.png)


RedaSQL is querying tool for redash.
I like `psql`(PostgreSQL CLI). so redasql resemble psql in some respects.

## Install

```bash
pip install redasql
```

## supported readsh version

RedaSQL supports Redash v8, v9 and v10.RedaSQL supports Redash v8, v9 and v10.

## How To Use

redasql need some arguments or environment variables.
redasql prioritizes arguments over environment variables.


| argument         | env                     | mean                                                                                                        | required             |
|------------------|-------------------------|-------------------------------------------------------------------------------------------------------------|----------------------|
| -k/--api-key     | REDASQL_REDASH_APIKEY   | API KEY(user api key)                                                                                       | True                 |
| -s/--server-host | REDASQL_REDASH_ENDPOINT | Redash server hostname. ex) https://your.redash.server.host/                                                | True                 |
| -p/--proxy       | REDASQL_HTTP_PROXY      | if your redash server restricted by Proxy, set url format. ex)http://user:pass@your.proxy.server:proxy-port | False                |
| -d/--data-source | None                    | initial connect datasource name.                                                                            | False                |
| --ignore-rc      | None                    | ignore `.redasqlrc` file                                                                                    | False(default false) |
|--wait-interval-sec| None                    | Wait Job Pooling Interval Sec| False(default 0.1)   |
|--timeout-count| None                    |Wait Job Pooling Count(int) | False(default 600)   |
| --debug          | None                    | debug mode                                                                                                  | False(default false) |


if you want to use redasql with direnv, rename `.envrc.sample` to `.envrc` and set attributes.

### special commands

redasql has management commands.

```
metadata=# \?
\?: HELP META COMMANDS.
\q: EXIT.
\d: DESCRIBE TABLE
\c: SELECT DATASOURCE.
\x: QUERY RESULT TOGGLE PIVOT.
\f: CHANGE RESULT FORMATTER ['table', 'markdown', 'markdown_with_sql', 'csv'].
\l: LOAD QUERY FROM REDASH.
\o: CHANGE THE OUTPUT DESTINATION TO ['stdout', 'stdout_and_clipboard', 'file'].
\i: LOAD QUERY FROM LOCAL FILE.
```

### execute query

see below

#### start
```
$ redasql

 ____          _       ____   ___  _     
|  _ \ ___  __| | __ _/ ___| / _ \| |    
| |_) / _ \/ _` |/ _` \___ \| | | | |    
|  _ <  __/ (_| | (_| |___) | |_| | |___ 
|_| \_\___|\__,_|\__,_|____/ \__\_\_____|

    - redash query cli tool -

SUCCESS CONNECT
- server version 8.0.0+b32245
- client version 0.1.0

(No DataSource)=#
```

#### connect datasource

use `\c data_source_name`. if not provide data_source_name, show all available data sources. 

```
(No DataSource)=# \c metadata
metadata=#
```

#### describe table

use `\d table_name`. if not provide table_name, show all table names. if provide table_name with wildcard(\*), show describe matched tables.

```
metadata=# \d
access_permissions
alembic_version
:
queries
query_results
query_snippets
users
visualizations
widgets
metadata=# \d queries
## queries
- schedule
- updated_at
- api_key
- name
- id
- version
- is_draft
- query
- is_archived
- tags
- last_modified_by_id
- org_id
- options
- query_hash
- description
- latest_query_data_id
- search_vector
- data_source_id
- schedule_failures
- created_at
- user_id
metadata=# \d query_*
## query_results
- id
- data
- org_id
- query_hash
- data_source_id
- runtime
- query
- retrieved_at
## query_snippets
- updated_at
- id
- description
- created_at
- user_id
- trigger
- snippet
- org_id

```

#### execute query

enter your SQL and semicolon.

```bash
metadata=# select count(*) from queries;
+-------+
| count |
+-------+
|  3606 |
+-------+

1 row returned.
Time: 0.0159s

```

`\x` pivot result.



```
metadata=# \x
set pivoted [True]

metadata=# select id, user_id from queries limit 3;
-[RECORD 1]-------
     id: 543
user_id: 40
-[RECORD 2]-------
     id: 717
user_id: 40
-[RECORD 3]-------
     id: 515
user_id: 38


3 rows returned.
Time: 0.0281s

```

### formats

redasql support many formats. `\f <format_name>` and `\x`



#### table format(default)

```
metadata=# select id, object_id, org_id, created_at from favorites limit 3;

+------+-------------+----------+--------------------------+
|   id |   object_id |   org_id | created_at               |
|------+-------------+----------+--------------------------|
|    2 |         513 |        1 | 2019-05-22T05:30:17.185Z |
|    3 |         514 |        1 | 2019-05-22T05:30:19.031Z |
|    4 |         230 |        1 | 2019-05-22T08:17:12.693Z |
+------+-------------+----------+--------------------------+

3 rows returned.
Time: 0.0219s
```

#### table format(pivoted)

```
metadata=# select id, object_id, org_id, created_at from favorites limit 3;

-[RECORD 1]----------
        id| 2
 object_id| 513
    org_id| 1
created_at| 2019-05-22T05:30:17.185Z
-[RECORD 2]----------
        id| 3
 object_id| 514
    org_id| 1
created_at| 2019-05-22T05:30:19.031Z
-[RECORD 3]----------
        id| 4
 object_id| 230
    org_id| 1
created_at| 2019-05-22T08:17:12.693Z


3 rows returned.
Time: 0.0223s

```

#### markdown

```
metadata=# \f markdown
set formatter [markdown]
metadata=# select id, object_id, org_id, created_at from favorites limit 3;

|   id |   object_id |   org_id | created_at               |
|------|-------------|----------|--------------------------|
|    2 |         513 |        1 | 2019-05-22T05:30:17.185Z |
|    3 |         514 |        1 | 2019-05-22T05:30:19.031Z |
|    4 |         230 |        1 | 2019-05-22T08:17:12.693Z |

3 rows returned.
Time: 0.0207s

```

#### markdown(pivoted)


```
metadata=# select id, object_id, org_id, created_at from favorites limit 3;

| colum_name   | value                    |
|--------------|--------------------------|
| created_at   | 2019-05-22T05:30:17.185Z |
| org_id       | 1                        |
| id           | 2                        |
| object_id    | 513                      |
| -----        | -----                    |
| created_at   | 2019-05-22T05:30:19.031Z |
| org_id       | 1                        |
| id           | 3                        |
| object_id    | 514                      |
| -----        | -----                    |
| created_at   | 2019-05-22T08:17:12.693Z |
| org_id       | 1                        |
| id           | 4                        |
| object_id    | 230                      |

3 rows returned.
Time: 0.0106s
```

#### markdown_with_sql

```
```sql
select id, object_id, org_id, created_at from favorites limit 3;
``` .

|   id |   object_id |   org_id | created_at               |
|------|-------------|----------|--------------------------|
|    2 |         513 |        1 | 2019-05-22T05:30:17.185Z |
|    3 |         514 |        1 | 2019-05-22T05:30:19.031Z |
|    4 |         230 |        1 | 2019-05-22T08:17:12.693Z |

3 rows returned.
Time: 0.0253s


```

#### csv

```
metadata=# \f csv
set formatter [csv]
metadata=# select id, object_id, org_id, created_at from favorites limit 3;

id,object_id,org_id,created_at
2,513,1,2019-05-22T05:30:17.185Z
3,514,1,2019-05-22T05:30:19.031Z
4,230,1,2019-05-22T08:17:12.693Z

```

### change output type

#### stdout(default)

result to stdout only.

```
metadata=# \o stdout
set output [stdout]
```

#### stdout_with_clipboard

result to stdout and clipboard.

```
metadata=# \o stdout_and_clipboard
set output [stdout_and_clipboard]
```

#### file

result to stdout and File.

```
metadata=# \o file /tmp/result.txt
set output [file(/tmp/result.txt)]
```


### run sqlfile

`\i` run local sqlfile.

```
metadata=# \i test.sql
select count(*) from queries;

+---------+
|   count |
|---------|
|    3876 |
+---------+

1 row returned.
Time: 0.018s

```

### quit

`ctrl + D` or `\q` quit redasql.

```
metadata=# \q                                                                                                                                                                        
Sayonara!
```

### .redasqlrc

if you create `~/.redasqlrc`, redasql reads the file at startup and performs initial settings.


## Contribution

### run test

#### start up containers (redash, MySQL, postgresql)

unittest necessary redash test server. use docker-compose.yml in `./tests/docker/v{REDAHS_VERSION}`

 - 8.0.2.b37747
 - 9.0.0-beta.b49509
 - 10.0.0.b50363

```bash
$ cd ./tests/docker/v8.0.2.b37747
$ docker-compose up -d
```

#### run test

```bash
$ python -m unittest discover -s tests/
```

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/denzow/redasql",
    "name": "redasql",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.8,<4.0",
    "maintainer_email": "",
    "keywords": "redash,sql",
    "author": "denzow",
    "author_email": "denzow@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/6d/c6/bbe31e73cdc84ea66d84bb7f7a09abf52522a580cf3dcd42adbbff3cc687/redasql-2.7.0.tar.gz",
    "platform": null,
    "description": "# RedaSQL\n![redasql](https://user-images.githubusercontent.com/4572217/138800787-b9525acd-8ab1-4f35-a762-948244b9caee.png)\n\n\nRedaSQL is querying tool for redash.\nI like `psql`(PostgreSQL CLI). so redasql resemble psql in some respects.\n\n## Install\n\n```bash\npip install redasql\n```\n\n## supported readsh version\n\nRedaSQL supports Redash v8, v9 and v10.RedaSQL supports Redash v8, v9 and v10.\n\n## How To Use\n\nredasql need some arguments or environment variables.\nredasql prioritizes arguments over environment variables.\n\n\n| argument         | env                     | mean                                                                                                        | required             |\n|------------------|-------------------------|-------------------------------------------------------------------------------------------------------------|----------------------|\n| -k/--api-key     | REDASQL_REDASH_APIKEY   | API KEY(user api key)                                                                                       | True                 |\n| -s/--server-host | REDASQL_REDASH_ENDPOINT | Redash server hostname. ex) https://your.redash.server.host/                                                | True                 |\n| -p/--proxy       | REDASQL_HTTP_PROXY      | if your redash server restricted by Proxy, set url format. ex)http://user:pass@your.proxy.server:proxy-port | False                |\n| -d/--data-source | None                    | initial connect datasource name.                                                                            | False                |\n| --ignore-rc      | None                    | ignore `.redasqlrc` file                                                                                    | False(default false) |\n|--wait-interval-sec| None                    | Wait Job Pooling Interval Sec| False(default 0.1)   |\n|--timeout-count| None                    |Wait Job Pooling Count(int) | False(default 600)   |\n| --debug          | None                    | debug mode                                                                                                  | False(default false) |\n\n\nif you want to use redasql with direnv, rename `.envrc.sample` to `.envrc` and set attributes.\n\n### special commands\n\nredasql has management commands.\n\n```\nmetadata=# \\?\n\\?: HELP META COMMANDS.\n\\q: EXIT.\n\\d: DESCRIBE TABLE\n\\c: SELECT DATASOURCE.\n\\x: QUERY RESULT TOGGLE PIVOT.\n\\f: CHANGE RESULT FORMATTER ['table', 'markdown', 'markdown_with_sql', 'csv'].\n\\l: LOAD QUERY FROM REDASH.\n\\o: CHANGE THE OUTPUT DESTINATION TO ['stdout', 'stdout_and_clipboard', 'file'].\n\\i: LOAD QUERY FROM LOCAL FILE.\n```\n\n### execute query\n\nsee below\n\n#### start\n```\n$ redasql\n\n ____          _       ____   ___  _     \n|  _ \\ ___  __| | __ _/ ___| / _ \\| |    \n| |_) / _ \\/ _` |/ _` \\___ \\| | | | |    \n|  _ <  __/ (_| | (_| |___) | |_| | |___ \n|_| \\_\\___|\\__,_|\\__,_|____/ \\__\\_\\_____|\n\n    - redash query cli tool -\n\nSUCCESS CONNECT\n- server version 8.0.0+b32245\n- client version 0.1.0\n\n(No DataSource)=#\n```\n\n#### connect datasource\n\nuse `\\c data_source_name`. if not provide data_source_name, show all available data sources. \n\n```\n(No DataSource)=# \\c metadata\nmetadata=#\n```\n\n#### describe table\n\nuse `\\d table_name`. if not provide table_name, show all table names. if provide table_name with wildcard(\\*), show describe matched tables.\n\n```\nmetadata=# \\d\naccess_permissions\nalembic_version\n:\nqueries\nquery_results\nquery_snippets\nusers\nvisualizations\nwidgets\nmetadata=# \\d queries\n## queries\n- schedule\n- updated_at\n- api_key\n- name\n- id\n- version\n- is_draft\n- query\n- is_archived\n- tags\n- last_modified_by_id\n- org_id\n- options\n- query_hash\n- description\n- latest_query_data_id\n- search_vector\n- data_source_id\n- schedule_failures\n- created_at\n- user_id\nmetadata=# \\d query_*\n## query_results\n- id\n- data\n- org_id\n- query_hash\n- data_source_id\n- runtime\n- query\n- retrieved_at\n## query_snippets\n- updated_at\n- id\n- description\n- created_at\n- user_id\n- trigger\n- snippet\n- org_id\n\n```\n\n#### execute query\n\nenter your SQL and semicolon.\n\n```bash\nmetadata=# select count(*) from queries;\n+-------+\n| count |\n+-------+\n|  3606 |\n+-------+\n\n1 row returned.\nTime: 0.0159s\n\n```\n\n`\\x` pivot result.\n\n\n\n```\nmetadata=# \\x\nset pivoted [True]\n\nmetadata=# select id, user_id from queries limit 3;\n-[RECORD 1]-------\n     id: 543\nuser_id: 40\n-[RECORD 2]-------\n     id: 717\nuser_id: 40\n-[RECORD 3]-------\n     id: 515\nuser_id: 38\n\n\n3 rows returned.\nTime: 0.0281s\n\n```\n\n### formats\n\nredasql support many formats. `\\f <format_name>` and `\\x`\n\n\n\n#### table format(default)\n\n```\nmetadata=# select id, object_id, org_id, created_at from favorites limit 3;\n\n+------+-------------+----------+--------------------------+\n|   id |   object_id |   org_id | created_at               |\n|------+-------------+----------+--------------------------|\n|    2 |         513 |        1 | 2019-05-22T05:30:17.185Z |\n|    3 |         514 |        1 | 2019-05-22T05:30:19.031Z |\n|    4 |         230 |        1 | 2019-05-22T08:17:12.693Z |\n+------+-------------+----------+--------------------------+\n\n3 rows returned.\nTime: 0.0219s\n```\n\n#### table format(pivoted)\n\n```\nmetadata=# select id, object_id, org_id, created_at from favorites limit 3;\n\n-[RECORD 1]----------\n        id| 2\n object_id| 513\n    org_id| 1\ncreated_at| 2019-05-22T05:30:17.185Z\n-[RECORD 2]----------\n        id| 3\n object_id| 514\n    org_id| 1\ncreated_at| 2019-05-22T05:30:19.031Z\n-[RECORD 3]----------\n        id| 4\n object_id| 230\n    org_id| 1\ncreated_at| 2019-05-22T08:17:12.693Z\n\n\n3 rows returned.\nTime: 0.0223s\n\n```\n\n#### markdown\n\n```\nmetadata=# \\f markdown\nset formatter [markdown]\nmetadata=# select id, object_id, org_id, created_at from favorites limit 3;\n\n|   id |   object_id |   org_id | created_at               |\n|------|-------------|----------|--------------------------|\n|    2 |         513 |        1 | 2019-05-22T05:30:17.185Z |\n|    3 |         514 |        1 | 2019-05-22T05:30:19.031Z |\n|    4 |         230 |        1 | 2019-05-22T08:17:12.693Z |\n\n3 rows returned.\nTime: 0.0207s\n\n```\n\n#### markdown(pivoted)\n\n\n```\nmetadata=# select id, object_id, org_id, created_at from favorites limit 3;\n\n| colum_name   | value                    |\n|--------------|--------------------------|\n| created_at   | 2019-05-22T05:30:17.185Z |\n| org_id       | 1                        |\n| id           | 2                        |\n| object_id    | 513                      |\n| -----        | -----                    |\n| created_at   | 2019-05-22T05:30:19.031Z |\n| org_id       | 1                        |\n| id           | 3                        |\n| object_id    | 514                      |\n| -----        | -----                    |\n| created_at   | 2019-05-22T08:17:12.693Z |\n| org_id       | 1                        |\n| id           | 4                        |\n| object_id    | 230                      |\n\n3 rows returned.\nTime: 0.0106s\n```\n\n#### markdown_with_sql\n\n```\n```sql\nselect id, object_id, org_id, created_at from favorites limit 3;\n``` .\n\n|   id |   object_id |   org_id | created_at               |\n|------|-------------|----------|--------------------------|\n|    2 |         513 |        1 | 2019-05-22T05:30:17.185Z |\n|    3 |         514 |        1 | 2019-05-22T05:30:19.031Z |\n|    4 |         230 |        1 | 2019-05-22T08:17:12.693Z |\n\n3 rows returned.\nTime: 0.0253s\n\n\n```\n\n#### csv\n\n```\nmetadata=# \\f csv\nset formatter [csv]\nmetadata=# select id, object_id, org_id, created_at from favorites limit 3;\n\nid,object_id,org_id,created_at\n2,513,1,2019-05-22T05:30:17.185Z\n3,514,1,2019-05-22T05:30:19.031Z\n4,230,1,2019-05-22T08:17:12.693Z\n\n```\n\n### change output type\n\n#### stdout(default)\n\nresult to stdout only.\n\n```\nmetadata=# \\o stdout\nset output [stdout]\n```\n\n#### stdout_with_clipboard\n\nresult to stdout and clipboard.\n\n```\nmetadata=# \\o stdout_and_clipboard\nset output [stdout_and_clipboard]\n```\n\n#### file\n\nresult to stdout and File.\n\n```\nmetadata=# \\o file /tmp/result.txt\nset output [file(/tmp/result.txt)]\n```\n\n\n### run sqlfile\n\n`\\i` run local sqlfile.\n\n```\nmetadata=# \\i test.sql\nselect count(*) from queries;\n\n+---------+\n|   count |\n|---------|\n|    3876 |\n+---------+\n\n1 row returned.\nTime: 0.018s\n\n```\n\n### quit\n\n`ctrl + D` or `\\q` quit redasql.\n\n```\nmetadata=# \\q                                                                                                                                                                        \nSayonara!\n```\n\n### .redasqlrc\n\nif you create `~/.redasqlrc`, redasql reads the file at startup and performs initial settings.\n\n\n## Contribution\n\n### run test\n\n#### start up containers (redash, MySQL, postgresql)\n\nunittest necessary redash test server. use docker-compose.yml in `./tests/docker/v{REDAHS_VERSION}`\n\n - 8.0.2.b37747\n - 9.0.0-beta.b49509\n - 10.0.0.b50363\n\n```bash\n$ cd ./tests/docker/v8.0.2.b37747\n$ docker-compose up -d\n```\n\n#### run test\n\n```bash\n$ python -m unittest discover -s tests/\n```\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "",
    "version": "2.7.0",
    "project_urls": {
        "Homepage": "https://github.com/denzow/redasql",
        "Repository": "https://github.com/denzow/redasql"
    },
    "split_keywords": [
        "redash",
        "sql"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a2fdcee86fbe928163b9ebc3fe67e07011e7a6f3a1987f92c96ce1871d7b1050",
                "md5": "3a73edd362835a82b21b11979642b974",
                "sha256": "95390316ca074194f55ea0cf693aedc35fcfcbe26d6069095eff833d7ff6deaf"
            },
            "downloads": -1,
            "filename": "redasql-2.7.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "3a73edd362835a82b21b11979642b974",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8,<4.0",
            "size": 22723,
            "upload_time": "2023-12-14T05:06:28",
            "upload_time_iso_8601": "2023-12-14T05:06:28.370724Z",
            "url": "https://files.pythonhosted.org/packages/a2/fd/cee86fbe928163b9ebc3fe67e07011e7a6f3a1987f92c96ce1871d7b1050/redasql-2.7.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6dc6bbe31e73cdc84ea66d84bb7f7a09abf52522a580cf3dcd42adbbff3cc687",
                "md5": "3861035d1acd6b29b4d76ca7c7d2df68",
                "sha256": "3a93ec76b96686f3f75bedc673c361abb0806f6497a10c135e185051627d8c93"
            },
            "downloads": -1,
            "filename": "redasql-2.7.0.tar.gz",
            "has_sig": false,
            "md5_digest": "3861035d1acd6b29b4d76ca7c7d2df68",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8,<4.0",
            "size": 20899,
            "upload_time": "2023-12-14T05:06:30",
            "upload_time_iso_8601": "2023-12-14T05:06:30.367245Z",
            "url": "https://files.pythonhosted.org/packages/6d/c6/bbe31e73cdc84ea66d84bb7f7a09abf52522a580cf3dcd42adbbff3cc687/redasql-2.7.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-12-14 05:06:30",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "denzow",
    "github_project": "redasql",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "redasql"
}
        
Elapsed time: 0.15261s