Skip to main content

Inline SQL in any Python program, on local dataframes

Project description

Inline SQL

PyPI - Version PyPI - Python Version

A simple embedded language for running inline SQL in Python programs.

import pandas as pd
from inline_sql import sql, sql_val


def head_data(count: int) -> pd.DataFrame:
    return sql^ "SELECT * FROM 'cars.csv' LIMIT $count"


cars = head_data(50)

origin_counts = sql^ """
    SELECT origin, COUNT() FROM cars
    GROUP BY origin
    ORDER BY count DESC
"""
print(origin_counts)

most_common = origin_counts.origin[0]
print(sql_val^ """
    SELECT AVG(horsepower) FROM cars
    WHERE origin = $most_common
""")

Operations in the inline_sql library directly use an in-memory database. You can access local datasets (pandas frames), CSV files, and interpolate variables seamlessly into queries. Internally, this is implemented as a small wrapper around DuckDB.

Installation

Supports Python 3.7+, tested on all major operating systems.

pip install inline-sql

Usage

The exported sql and sql_val variables are magic objects that can be used to run queries. Queries can read from local dataframes by name, and they can embed parameters using dollar-sign notation.

>>> from inline_sql import sql, sql_val

>>> sql_val^ "SELECT 1 + 1"
2

>>> x = 5

>>> sql_val^ "SELECT 2 * $x"
10

>>> sql^ "SELECT * FROM 'disasters.csv' LIMIT 5"
                  Entity  Year   Deaths
0  All natural disasters  1900  1267360
1  All natural disasters  1901   200018
2  All natural disasters  1902    46037
3  All natural disasters  1903     6506
4  All natural disasters  1905    22758

>>> def total_deaths(entity: str) -> float:
...     return sql_val^ "SELECT SUM(deaths) FROM disasters WHERE Entity = $entity"
...

>>> total_deaths("Drought")
11731294.0

>>> total_deaths("Earthquake")
2576801.0

You can run any SQL query as described in the DuckDB documentation.

Acknowledgements

Created by Eric Zhang (@ekzhang1). Licensed under the MIT license.

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

inline_sql-0.1.0.tar.gz (22.1 kB view details)

Uploaded Source

Built Distribution

inline_sql-0.1.0-py3-none-any.whl (5.1 kB view details)

Uploaded Python 3

File details

Details for the file inline_sql-0.1.0.tar.gz.

File metadata

  • Download URL: inline_sql-0.1.0.tar.gz
  • Upload date:
  • Size: 22.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.23.0

File hashes

Hashes for inline_sql-0.1.0.tar.gz
Algorithm Hash digest
SHA256 6ded072cb73ff6297a4bae731628a95d3da59807effa9e63557946612f54734e
MD5 5a749b1ac40917d02401d86243db7fc0
BLAKE2b-256 a84f9454bf58d07bc8992b1ef5d0739e5c373a4eb84acf1120fbe45ffabb29e6

See more details on using hashes here.

File details

Details for the file inline_sql-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for inline_sql-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7e236518919e11926cb40e2c1a63ea17a788f0f463b09dc3c1395c2243a8b6ab
MD5 1b2fff9b83025d4561524e1958ab0dfa
BLAKE2b-256 8991de5b31357d82bab25405b9c53472cca1b64f136223c4960c7c8375afd42f

See more details on using hashes here.

Supported by

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