Skip to main content

abstra-json-sql

abstra-json-sql is a Python library that allows you to run SQL queries on JSON data. It is designed to be simple and easy to use, while providing powerful features for querying and manipulating JSON data.

[!WARNING]
This project is in its early stages and is not yet ready for production use. The API may change, and there may be bugs. Use at your own risk.

Installation

You can install abstra-json-sql using pip:

pip install abstra-json-sql

Usage

Command Line Interface

Assuming you have a directory structure like this:

.
├── organizations.json
├── projects.json
└── users.json

Querying Data

You can query the JSON files using SQL syntax. For example, to get all users from the users file, you can run:

abstra-json-sql "select * from users"

Or using the explicit query subcommand:

abstra-json-sql query --code "select * from users"

This will return all the users in the users.json file.

Interactive Mode

You can also run the CLI in interactive mode:

abstra-json-sql

This will start an interactive SQL prompt where you can type queries and see results immediately.

Creating Tables

You can create new tables interactively using the create table command:

abstra-json-sql create table --interactive

This will guide you through the process of creating a new table by asking for:

  • Table name
  • Column names and types (int, string, float, bool)
  • Primary key designation
  • Default values

The interactive table creation supports:

  • Column types: int, string, float, bool
  • Primary keys: Mark columns as primary keys during creation
  • Default values: Set default values for columns
  • Validation: Prevents duplicate table/column names and validates data types

Output Formats

You can specify the output format using the --format option:

abstra-json-sql "select * from users" --format csv
abstra-json-sql "select * from users" --format json

Python API

You can also use abstra-json-sql in your Python code. Here's an example:

from abstra_json_sql.eval import eval_sql
from abstra_json_sql.tables import InMemoryTables, Table, Column

code = "\n".join(
    [
        "select foo, count(*)",
        "from bar as baz",
        "where foo is not null",
        "group by foo",
        "having foo <> 2",
        "order by foo",
        "limit 1 offset 1",
    ]
)
tables = InMemoryTables(
    tables=[
        Table(
            name="bar",
            columns=[Column(name="foo", type="text")],
            data=[
                {"foo": 1},
                {"foo": 2},
                {"foo": 3},
                {"foo": 2},
                {"foo": None},
                {"foo": 3},
                {"foo": 1},
            ],
        )
    ],
)
ctx = {}
result = eval_sql(code=code, tables=tables, ctx=ctx)

print(result) # [{"foo": 3, "count": 2}]

CLI Examples

Basic Query

# Query all records from a table
abstra-json-sql "SELECT * FROM users"

# Query with conditions
abstra-json-sql "SELECT name, email FROM users WHERE age > 25"

Interactive Table Creation

# Start interactive table creation
abstra-json-sql create table --interactive

# Example interaction:
# Table name: employees
# Column name: id
# Column type for 'id' (int/string/float/bool): int
# Is 'id' a primary key? (y/N): y
# Column name: name
# Column type for 'name' (int/string/float/bool): string
# Column name: salary
# Column type for 'salary' (int/string/float/bool): float
# Does 'salary' have a default value? (y/N): y
# Default value for 'salary': 0.0
# Column name: (press Enter to finish)

Output Formats

# JSON output (default)
abstra-json-sql "SELECT * FROM users" --format json

# CSV output
abstra-json-sql "SELECT * FROM users" --format csv

Working Directory

# Specify a different working directory
abstra-json-sql "SELECT * FROM users" --workdir /path/to/json/files

Features

  • SQL Queries on JSON: Run SQL queries directly on JSON files
  • Command Line Interface: Easy-to-use CLI with multiple output formats
  • Interactive Mode: Interactive SQL prompt for exploratory queries
  • Table Management: Create and manage tables interactively
  • Multiple Output Formats: Support for JSON and CSV output
  • Python API: Use the library programmatically in your Python projects

Supported SQL Syntax

  • WITH

    • RECURSIVE
  • SELECT

    • ALL
    • DISTINCT
    • *
    • FROM
      • JOIN
        • INNER JOIN
        • LEFT JOIN
        • RIGHT JOIN
        • FULL JOIN
        • CROSS JOIN
    • WHERE
    • GROUP BY
    • HAVING
    • WINDOW
    • ORDER BY
    • LIMIT
    • OFFSET
    • FETCH
    • FOR
  • INSERT

    • INTO
    • VALUES
    • DEFAULT
    • SELECT
    • RETURNING
  • UPDATE

  • DELETE

  • CREATE

    • TABLE (via interactive CLI)
  • DROP

  • ALTER

Metadata

Release files for abstra-json-sql 0.0.15

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for abstra-json-sql 0.0.15
File Size Uploaded
abstra_json_sql-0.0.15.tar.gz 37.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for abstra-json-sql 0.0.15
File Interpreter ABI Platform
abstra_json_sql-0.0.15-py3-none-any.whl Python 3 none any Details

Total release size: 84.7 kB

Release files / abstra_json_sql-0.0.15.tar.gz

Download URL abstra_json_sql-0.0.15.tar.gz
Size 37.3 kB
Tags Source
SHA-256 checksum
How to use checksums
4b948b79f13e46fa7926d6824262f907e2a177b097d4d84a89c8153ff4c4b4d8
BLAKE2b-256 checksum
How to use checksums
a3b631165a847888c35640740487a6dafb5309086a7b2400b3294a5e1a99b154
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / abstra_json_sql-0.0.15-py3-none-any.whl

Download URL abstra_json_sql-0.0.15-py3-none-any.whl
Size 47.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
157adb685d5c866409486019a7c12a591b90076c476ded9039b9c98911b0e111
BLAKE2b-256 checksum
How to use checksums
c9782dcdeb864d58401424646de0091d5ae5fb775be9fefe4088b55aab4b4040
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release history Release notifications | RSS feed

This release

0.0.15 This release

2 release files

0.0.14

2 release files

0.0.13

2 release files

0.0.12

2 release files

0.0.11

2 release files

0.0.10

2 release files

0.0.9

2 release files

0.0.8

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page