Skip to main content

Convert SQL to most human readable format

Project description

readsql

Convert SQL to most human readable format. For the time being it upper cases SQL keywords, it might prettify or even suggest improvements of SQL code in the future. It converts SQL code and even SQL-strings in programming languages (only Python at the moment).

So if we write

select sushi, avg(price) from tokyo where ocean = 'pacific' group by sushi

readsql will help us read it as

SELECT sushi, AVG(price) FROM tokyo WHERE ocean = 'pacific' GROUP BY sushi

Installation

pip install readsql

Requires Python 3.8+.

Usage

  1. Format SQL code provided in command line
    • readsql <SQL_STRING> -s
  2. Format an SQL file or folder
    • as in a folder, it will look for files ending with .sql or .py
    • readsql <FILE_OR_FOLDER_PATH>

It supports multiple strings and files or folders as well

readsql <SQL_STRING1> <SQL_STRING2> -s
  1. In Python files it looks for variable query strings and formats them
readsql <FILE_OR_FOLDER_PATH1> <FILE_OR_FOLDER_PATH2>

We can look for different strings in Python files with -py arguments

readsql <FILE_OR_FOLDER_PATH> -py <PY_VAR1> <PY_VAR2>

Usage examples

  1. readsql 'select sushi from tokyo' -s command returns

    • SELECT sushi FROM tokyo
  2. a. readsql sql_example.sql command, while sql_example.sql is a SQL file with code as below,

select max(height), avg(mass), min(age) from jungle group by forest where animal=elephant;

replaces the file with this code

SELECT MAX(height), AVG(mass), MIN(age) FROM jungle GROUP BY forest WHERE animal=elephant;
  1. b. readsql sql_in_python_variable_example.py command, while sql_in_python_variable_example.py is a Python file with code as below,
def get_query():
    limit = 6
    query = f"SELEct speed from world where animal='dolphin' limit {limit}"
    return query

replaces the file with this code

def get_query():
    limit = 6
    query = f"SELECT speed FROM world WHERE animal='dolphin' LIMIT {limit}"
    return query
  1. c. readsql sql_in_python_variable_example.py -py sql command, while sql_in_python_variable_example.py is a Python file with code as below,
def get_query():
    limit = 6
    sql = f"SELEct speed from world where animal='dolphin' limit {limit}"
    return sql

replaces the file with this code

def get_query():
    limit = 6
    sql = f"SELECT speed FROM world WHERE animal='dolphin' LIMIT {limit}"
    return sql
  1. d. readsql tests -n command outputs all of the formated SQL code in tests folder, files are not replaced by the formatted version (-n argument stand for not-replace)

More examples can be found in /tests folder

Add a pre-commit hook

How to add a pre-commit hook of readsql?

repos:
-   repo: https://github.com/AzisK/readsql
    rev: v1.0.0  # Replace by any tag/version: https://github.com/azisk/readsql/tags
    hooks:
    -   id: readsql

Development

Clone the repo and use uv for development:

uv sync --all-extras                                    # Install dependencies
uv run readsql "select sushi from tokyo" -s             # Format a string
uv run readsql tests/sql_example.sql                    # Format SQL file
uv run readsql tests/sql_in_python_example.py           # Format SQL in Python
uv run readsql tests/sql_in_python_variable_example.py -py sql  # Custom variable
uv run readsql tests                                    # Format all files in folder

Testing

uv run pytest -v

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

readsql-1.0.0.tar.gz (19.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

readsql-1.0.0-py3-none-any.whl (5.7 kB view details)

Uploaded Python 3

File details

Details for the file readsql-1.0.0.tar.gz.

File metadata

  • Download URL: readsql-1.0.0.tar.gz
  • Upload date:
  • Size: 19.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for readsql-1.0.0.tar.gz
Algorithm Hash digest
SHA256 3c20d88067a89619fedd7913edefa6a42a4579edcdf4e6384cd7b6134236c110
MD5 f61d08a873ace8be41e19869d61290cf
BLAKE2b-256 51754da8581f47d1a1308c98f98ee53aa007c035b898d1177057ff15a3400c94

See more details on using hashes here.

Provenance

The following attestation bundles were made for readsql-1.0.0.tar.gz:

Publisher: publish-pypi.yml on AzisK/readsql

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file readsql-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: readsql-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 5.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for readsql-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d86ffca05bd553ab7b27ce29c3ead56b61efe94b4f79337245abfb5b674f8ed8
MD5 3a09170dba1cea754cae4998a1914a9f
BLAKE2b-256 9cfc0741165a19fd5260728d24d470c70edad650e9be2cd405f0ea50a073d08d

See more details on using hashes here.

Provenance

The following attestation bundles were made for readsql-1.0.0-py3-none-any.whl:

Publisher: publish-pypi.yml on AzisK/readsql

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page