跳转到主要内容

在任何Python程序中,在本地dataframes上执行内联SQL

项目描述

Inline SQL

PyPI - Version PyPI - Python Version

一种简单的内嵌语言,用于在Python程序中执行内联SQL。

from inline_sql import sql, sql_val

assert sql_val^ "SELECT 1 + 1" == 2

x = 5
assert sql_val^ "SELECT $x * 2" == 10

df = sql^ "SELECT * FROM (VALUES (1, 10), (2, 20)) df (x, y)"
assert sql_val^ "SELECT SUM(x) + SUM(y) FROM df" == 33

inline_sql库中的操作直接在您的进程中运行。您可以直接查询本地数据集(pandas frames)、CSV文件,甚至可以无缝地插入变量。它通过一个小封装器实现,所以它非常快

安装

支持Python 3.7+,已在所有主要操作系统上进行了测试。

pip install inline-sql

用法

导出的sqlsql_val变量是魔法对象,可用于运行查询。查询可以通过名称从本地dataframes中读取,并可以使用美元符号进行参数嵌入。

>>> 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

>>> disasters = sql^ "SELECT * FROM 'disasters.csv'"

>>> 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

您可以根据DuckDB文档中的描述运行任何SQL查询。

库使用

您可以将inline_sql用作库。由于查询的结果是普通的pandas.DataFrame对象,它们可以在函数和应用程序代码中使用。以下是一个更长的示例

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
""")

通常,sql_val用于运行标量查询,而sql用于运行返回表的查询。

致谢

由Eric Zhang (@ekzhang1)创建。许可协议为MIT许可证

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

inline_sql-0.1.2.tar.gz (22.4 kB 查看哈希值)

上传时间 源代码

构建分发

inline_sql-0.1.2-py3-none-any.whl (5.3 kB 查看哈希值)

上传时间 Python 3

由以下提供支持