Skip to main content

csvql-query

CI License: MIT PyPI

Query CSV files with SQL from Python — powered by a Zig/SIMD engine.

Zero-copy mmap reads + SIMD parsing happen before Python ever sees the data. Faster than DuckDB on typical workloads, no dependencies required.

Installation

pip install csvql-query

Quick Start

import csvql

# Returns a list of dicts (like csv.DictReader, but with SQL)
rows = csvql.query("SELECT name, salary FROM 'employees.csv' WHERE salary > 100000 ORDER BY salary DESC")
# [{'name': 'Alice', 'salary': '185000'}, ...]

# Raw CSV string
csv_str = csvql.query_csv("SELECT * FROM 'data.csv' LIMIT 10")

# pandas DataFrame (pandas must be installed)
df = csvql.query_df("SELECT category, COUNT(*) as n FROM 'sales.csv' GROUP BY category")

# (headers, rows) tuples — no dependencies
headers, rows = csvql.query_tuples("SELECT name, age FROM 'users.csv' WHERE age > 25")

API

Function Returns Description
query(sql) list[dict] Execute SQL, get list of dicts
query_csv(sql) str Execute SQL, get raw CSV string
query_df(sql) DataFrame Execute SQL, get pandas DataFrame
query_tuples(sql) (list[str], list[tuple]) Execute SQL, get (headers, rows)

SQL Support

The SQL path is embedded in the query string (same as the CLI):

# Filtering, ordering, limiting
csvql.query("SELECT name, city FROM 'data.csv' WHERE age > 30 ORDER BY name LIMIT 5")

# Aggregation
csvql.query("SELECT department, AVG(salary) FROM 'emp.csv' GROUP BY department")

# Unix pipes — use '-' as the filename
import subprocess, sys
# or just pass stdin data via the engine directly

Full SQL reference: SIMPLE_QUERY_LANGUAGE.md

Performance

  • mmap + SIMD parsing — data is never copied into Python memory
  • Parallel chunk processing on multi-core machines
  • Typically 5–9x faster than DuckDB on 1M-row CSVs

Requirements

  • Python ≥ 3.10
  • macOS (x86_64 / arm64) or Linux (x86_64)
  • pandas optional — only needed for query_df()

Links

Metadata

Release files for csvql-query 1.9.0

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

Built distributions (wheels)

Table of built distributions (wheels) for csvql-query 1.9.0
File Interpreter ABI Platform
csvql_query-1.9.0-py3-none-manylinux_2_17_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64 Details
csvql_query-1.9.0-py3-none-macosx_12_0_x86_64.whl Python 3 none macOS 12.0+ x86-64 Details
csvql_query-1.9.0-py3-none-macosx_12_0_arm64.whl Python 3 none macOS 12.0+ ARM64 Details

Total release size: 2.5 MB

Release files / csvql_query-1.9.0-py3-none-manylinux_2_17_x86_64.whl

Download URL csvql_query-1.9.0-py3-none-manylinux_2_17_x86_64.whl
Size 1.8 MB
Tags Linux glibc 2.17+ x86-64 Python 3
SHA-256 checksum
How to use checksums
1acd12a2de7a1985b983bb6c07707ab29379178868c64fe0368a96f9f11b792b
BLAKE2b-256 checksum
How to use checksums
5b8c080dfde733e39e1e505da6b6c25a273d4ba24260c63d2b2203ff3c1fbfba
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release files / csvql_query-1.9.0-py3-none-macosx_12_0_x86_64.whl

Download URL csvql_query-1.9.0-py3-none-macosx_12_0_x86_64.whl
Size 385.9 kB
Tags Python 3 macOS 12.0+ x86-64
SHA-256 checksum
How to use checksums
8d6445e8ad3ad0848d0ae6404029e0e25f17298ca84b08dc293124a1540b6973
BLAKE2b-256 checksum
How to use checksums
11ffb575b53add5d4ad89713b25cb49e0e1b066c002f9e8ff94b6e5c3b067a0c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release files / csvql_query-1.9.0-py3-none-macosx_12_0_arm64.whl

Download URL csvql_query-1.9.0-py3-none-macosx_12_0_arm64.whl
Size 385.9 kB
Tags Python 3 macOS 12.0+ ARM64
SHA-256 checksum
How to use checksums
c7b82e38fb3a7dce5b18c9eed26b35d43ba229676dc0feadd915fa73231a0f7d
BLAKE2b-256 checksum
How to use checksums
cd41833b9f3fc3a83eb3b0c1fc3ba3c7cba9b89761ad3d0bc9d142d500fdfdb8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release history Release notifications | RSS feed

2.9.0

5 release files

2.8.1

5 release files

2.8.0

5 release files

2.7.0

5 release files

2.6.3

5 release files

2.6.2

5 release files

2.6.0

3 release files

2.5.0

3 release files

2.4.3

3 release files

2.4.1

3 release files

2.4.0

3 release files

2.3.0

3 release files

2.2.0

3 release files

2.1.1

3 release files

2.1.0

3 release files

2.0.4

3 release files

2.0.3

3 release files

2.0.2

3 release files

2.0.1

3 release files

2.0.0

3 release files

This release

1.9.0 This release

3 release files

1.8.0

3 release files

1.7.2

3 release files

1.7.1

3 release files

1.7.0

3 release files

1.6.1

3 release files

1.6.0

3 release files

1.5.13

3 release files

1.5.12

3 release files

1.5.11

3 release files

1.5.10

3 release files

1.5.9

3 release files

1.5.8

3 release files

1.5.7

3 release files

1.5.6

3 release files

1.5.5

3 release files

1.5.1

3 release files

1.5.0

3 release files

1.4.0

3 release files

1.3.0

3 release files

1.1.1

3 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