sling
Slings data from a source to a target
What it is and what it does
Sling is a Python-based ETL/ELT tool that moves data between databases, files, and in-memory Python structures. It provides both a command-line interface and a Python API (Replication and Sling classes) for defining and running data transfer tasks. The package handles schema mapping, mode selection (full-refresh or incremental), and can stream data from sources like PostgreSQL, Snowflake, or CSV files to targets like databases or local files.
The tool supports multiple usage patterns: CLI-based configuration via YAML, programmatic replication definitions, and direct streaming for memory-efficient processing of large datasets. It can ingest pandas or polars DataFrames, lists of dictionaries, or generator functions as input, and offers both standard streaming (via stream()) and high-performance Arrow-based streaming (via stream_arrow()) for type-preserving data transfer. Connection management is handled through environment variables or direct parameters.
Use it for:
- Migrate tables from PostgreSQL to Snowflake or other data warehouses with full-refresh or incremental modes.
- Load CSV or JSON files into a database, preserving data types when using Arrow format.
- Stream large datasets from a database to files or another system without loading everything into memory.
- Programmatically replicate multiple database schemas with templated naming and custom transformations.
- Export pandas or polars DataFrames to databases or files as part of a Python data pipeline.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Sling moves data between databases, files, and Python data structures using a command-line tool or Python API, supporting extract-load workflows with multiple source and target connectors.
Yes, if you need straightforward data movement between databases and files. The package is actively maintained, has no security vulnerabilities, and installs cleanly. However, verify the license status before production use—the metadata shows no SPDX identifier or license text, which is a red flag for compliance-sensitive projects. The API is well-documented in the description, and the low install friction makes it a reasonable choice for ETL/ELT tasks.
Install
sling on PyPI
pip
pip install slinguv
uv add slingpoetry
poetry add slingInstalling sling
Before you install
Installs cleanly with no runtime dependencies. The package is actively maintained with a recent release (5 days old) and steady development activity.
License in practice
License status is unclear—no SPDX identifier or raw license text is available in the package metadata. Verify the actual license before using in production or proprietary work.
Quickstart
pip install sling
from sling import Sling, Mode
import os
os.environ["POSTGRES"] = 'postgres://...'
os.environ["SNOWFLAKE"] = 'snowflake://...'
Sling(
src_conn="postgres",
src_stream="public.users",
tgt_conn="snowflake",
tgt_object="public.users_copy",
mode=Mode.FULL_REFRESH
).run()
Requires Python >=3.9. Connection strings for source and target systems must be set as environment variables or passed directly.
Verify before relying
- Whether the unclear license is a metadata issue or an actual licensing concern requiring legal review.
- Performance characteristics and scalability limits for large datasets or high-frequency replication.
- Which database systems and file formats are actually supported beyond the examples shown.
Package facts
| License | not declared (unclear) |
| Python support | supports the current Python release (>=3.9) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | none |
| Maintenance | actively maintained — 5 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 126,262/month — #11,783 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: sling-1.5.24-py3-none-any.whl
Keywords: sling, etl, elt, extract, load
Tags
More Utilities packages
Converts domain names between Unicode and…
permissive · top 100 on PyPI
charset-normalizerDetects and normalizes text encoding from…
permissive · top 100 on PyPI
setuptoolsSetuptools is a Python build backend and…
permissive · top 100 on PyPI
pluggyPluggy provides a plugin system that lets you…
permissive · top 100 on PyPI
PygmentsPygments is a syntax highlighter that colorizes…
permissive · top 100 on PyPI
sixSix provides utility functions to write Python…
permissive · top 100 on PyPI
dagster-slingIntegrates Sling ETL/ELT tasks into Dagster…
permissive · top 15,000 on PyPI
ingestringestr is a command-line tool that copies data…
permissive · top 15,000 on PyPI
arrow-odbcReads data from ODBC data sources directly into…
permissive · top 15,000 on PyPI
dltdlt automates extraction, schema inference, and…
permissive · top 5,000 on PyPI
wbdataWbdata provides a Python interface to query and…
copyleft · top 5,000 on PyPI
pgpqEncodes PyArrow RecordBatches into PostgreSQL's…
permissive · top 15,000 on PyPI
streamlinkStreamlink extracts video streams from various…
permissive · top 15,000 on PyPI
django-postgres-copyProvides Django ORM integration for…
permissive · top 5,000 on PyPI
collate-data-diffCompares rows across two SQL databases or…
permissive · top 5,000 on PyPI