snowflake-sql-api
A lightweight, pure-Python client for Snowflake's SQL API v2
(the POST /api/v2/statements REST endpoint).
Status: pre-1.0. The API may still change between minor versions.
Why
The official snowflake-connector-python
is ~75 MB installed (150 MB with pandas/pyarrow) and ships a compiled extension
that slows container builds and inflates cold starts (its import alone is ~1.5 s
versus ~0.3 s for this client). For serverless and AWS Lambda workloads that only
need to run SQL, that is a lot of weight.
snowflake-sql-api talks to Snowflake's SQL API over plain HTTP (httpx), so it
stays small and cold-starts quickly. Core dependencies: httpx, PyJWT,
cryptography.
Features
- Synchronous and asynchronous clients with the same surface
- Keypair (JWT) authentication, including encrypted private keys
- Result type coercion (NUMBER/Decimal, dates/timestamps, VARIANT, and more)
- Multi-partition result handling for large result sets
- Lazy row streams and bounded row batches, with CSV and JSONL exports
- Query helpers, DML, batch insert, async statement submission
- A small CLI for ad-hoc queries
- Optional pandas (
[pandas]) and typed-row ([pydantic]) helpers, kept out of the default install
Install
pip install snowflake-sql-api
# optional extras
pip install "snowflake-sql-api[pandas]"
pip install "snowflake-sql-api[pydantic]"
Quick start
from snowflake_sql_api import SnowflakeClient
client = SnowflakeClient(
account="myorg-myaccount",
user="MY_USER",
private_key_path="/path/to/rsa_key.p8",
)
rows = client.query("SELECT id, name FROM users WHERE active = ?", [True])
for row in rows:
print(row["ID"], row["NAME"])
Async:
from snowflake_sql_api import AsyncSnowflakeClient
async with AsyncSnowflakeClient.from_env() as client:
rows = await client.query("SELECT current_timestamp()")
CLI:
snowflake-sql-api query "SELECT current_version()"
Stream large results or export them without collecting every row:
with SnowflakeClient.from_env() as client:
for batch in client.query_batches("SELECT id, amount FROM sales", batch_size=500):
process(batch)
with open("sales.csv", "w", encoding="utf-8", newline="") as output:
count = client.export_csv("SELECT id, amount FROM sales", output)
Streaming fetches completed results one server partition at a time. Memory scales with the largest decoded partition plus the application batch. See streaming results and exports for row streams, async usage, serialization, and partial-output behavior.
Prior art and alternatives
snowflake-sql-api is not the first REST-based Snowflake client. If it does not
fit your needs, one of these might:
| Project | Language | Notes |
|---|---|---|
snowflake-connector-python |
Python | Official driver. Full-featured (DB-API, pandas/Arrow, every auth mode) but large and slow to cold-start. Use it when you need the full driver. |
snowflake-rest |
Python | The closest prior art and a direct inspiration for this project's API. Pure-Python over requests, sync-only, currently low-activity. |
snowflake-sql-api-async |
Python | Async-focused, but depends on snowflake-connector-python. |
snowflake-sql-api-client |
Python | Low-level generated wrapper; unmaintained since 2022. |
rb_snowflake_client |
Ruby | Mature pure-Ruby SQL API client (streaming, connection pooling). |
rsql |
Rust | Multi-database SQL CLI with a Snowflake SQL API driver. |
How snowflake-sql-api differs: pure Python over httpx, with no
dependency on the official connector (small install, fast cold start), paired
sync and async clients, keypair auth, type coercion, partition handling, and a
CLI as tested first-class behavior.
Note: the similarly named snowflake-sql-api-async and snowflake-sql-api-client
are separate, unaffiliated projects.
Acknowledgements
The API design is inspired by pps-19012/snowflake-rest
by Pushpendra Singh. This is a clean-room implementation (no code copied); credit
for the original design and API shape goes to its author.
License
MIT
Metadata
Release files for snowflake-sql-api 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| snowflake_sql_api-0.1.3.tar.gz | 56.2 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| snowflake_sql_api-0.1.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 97.4 kB
Release files / snowflake_sql_api-0.1.3.tar.gz
| Download URL | snowflake_sql_api-0.1.3.tar.gz |
|---|---|
| Size | 56.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a2d45009a1abba6c2a5b58fcbdcbe074fa673b837ed486c642a8085a8e5ed341
|
|
BLAKE2b-256 checksum How to use checksums |
b9d0561a806ba8110cddbc292c24c5121e6c436aeef2b0021026be7df94b8d35
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.
Transparency logRelease files / snowflake_sql_api-0.1.3-py3-none-any.whl
| Download URL | snowflake_sql_api-0.1.3-py3-none-any.whl |
|---|---|
| Size | 41.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
dee76759646e7864f45e63253c6b68344980c59b15db4433fa8915a31577fb6b
|
|
BLAKE2b-256 checksum How to use checksums |
a197e2ed583ef76444b0f8145e24d12b15360c64cec2b77b18e646a38ff57f78
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.
Transparency logSecurity for snowflake-sql-api 0.1.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for snowflake_sql_api-0.1.3.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.