Modular CLI + API tool to extract data from PostgreSQL, Redshift, SQLite (and more), exporting to formats like Parquet/CSV, with optional S3 upload and Athena integration.
- π Run custom SQL queries against PostgreSQL, Redshift, SQLite
- π¦ Export to Parquet or CSV (
--format) - π©£ Upload results to S3 or MinIO
- π Redshift
UNLOADsupport (--export-mode redshift-unload) - π§Ή Partition output by column
- π Generate Athena
CREATE TABLEDDL - π Preview local or remote Parquet/CSV files
- βοΈ
.envsupport for convenient config - π Reusable Python API
SQLxport simplifies data export workflows and is designed for automation:
- β One command gives you SQL β Parquet/CSV β S3
- π§± Works locally, in CI, or inside Docker
- πͺ’ Connects to Athena, MinIO, Redshift easily
- π Clean format and database plugin model
- π§ͺ Fully tested, scriptable, production-ready
pip install .
# or for development
pip install -e .--export-mode |
Compatible DB URLs | Description |
|---|---|---|
postgres-query |
postgresql://, postgres:// |
SELECT + local export |
redshift-unload |
redshift:// |
UNLOAD to S3 |
sqlite-query |
sqlite:///path.db |
For local/lightweight testing |
sqlxport run \
--export-mode postgres-query \
--db-url postgresql://user:pass@localhost:5432/mydb \
--query "SELECT * FROM users" \
--output-file users.parquet \
--format parquetsqlxport run \
--export-mode postgres-query \
--db-url postgresql://... \
--query "..." \
--output-file users.parquet \
--s3-bucket my-bucket \
--s3-key users.parquet \
--s3-access-key AKIA... \
--s3-secret-key ... \
--s3-endpoint https://s3.amazonaws.comsqlxport run \
--export-mode postgres-query \
--db-url postgresql://... \
--query "..." \
--output-dir output/ \
--partition-by group_column \
--format csvsqlxport run \
--export-mode redshift-unload \
--db-url redshift://... \
--query "SELECT * FROM large_table" \
--s3-output-prefix s3://bucket/unload/ \
--iam-role arn:aws:iam::123456789012:role/MyUnloadRolefrom sqlxport.api.export import run_export, ExportJobConfig
config = ExportJobConfig(
db_url="sqlite:///test.db",
query="SELECT * FROM users",
format="csv",
output_file="out.csv",
export_mode="sqlite-query"
)
run_export(config)pytest tests/unit/
pytest tests/integration/
pytest tests/e2e/Supports .env or exported shell variables:
DB_URL=postgresql://username:password@localhost:5432/mydb
S3_BUCKET=my-bucket
S3_KEY=data/users.parquet
S3_ACCESS_KEY=...
S3_SECRET_KEY=...
S3_ENDPOINT=https://s3.amazonaws.com
IAM_ROLE=arn:aws:iam::123456789012:role/MyUnloadRoleGenerate a template with:
sqlxport run --generate-env-template- β Modular export modes
- β CSV and partitioned output
- β³ Add
jsonl,xlsxformats - β³ Plugin system for writers/loaders
- β³ SaaS mode / UI platform
- β³ Kafka/Kinesis streaming support
- Donβt commit
.envfiles - Use credential vaults when possible
Vahid Saber
Built with β€οΈ for data engineers and developers.
MIT License