Lightweight, pure-Python client for Snowflake's SQL API v2
Project description
snowflake-sql-api
A lightweight, pure-Python client for Snowflake's SQL API v2
(the POST /api/v2/statements REST endpoint).
Status: in active development, not yet released. The API may change before
v0.1.0.
Why
The official snowflake-connector-python
is ~75 MB installed (150 MB with pandas/pyarrow), has an 8-20 s cold start, and
ships a compiled extension that slows container builds. 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
- 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()"
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, and 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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file snowflake_sql_api-0.1.1.tar.gz.
File metadata
- Download URL: snowflake_sql_api-0.1.1.tar.gz
- Upload date:
- Size: 46.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2a8e725cd8cf1f9709718b06ca365e8c46d85d218fa9543801b01c1fda5e075f
|
|
| MD5 |
b200902c0e207280b087121ba0874b14
|
|
| BLAKE2b-256 |
c72e493e4ba2d7cb1b09604290aee398cf102310982166b4e2104c78576ebf3e
|
Provenance
The following attestation bundles were made for snowflake_sql_api-0.1.1.tar.gz:
Publisher:
publish.yml on hampsterx/snowflake-sql-api
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
snowflake_sql_api-0.1.1.tar.gz -
Subject digest:
2a8e725cd8cf1f9709718b06ca365e8c46d85d218fa9543801b01c1fda5e075f - Sigstore transparency entry: 1961172464
- Sigstore integration time:
-
Permalink:
hampsterx/snowflake-sql-api@abf620253a657f549453b7833bbf61091b4dd1b7 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/hampsterx
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@abf620253a657f549453b7833bbf61091b4dd1b7 -
Trigger Event:
push
-
Statement type:
File details
Details for the file snowflake_sql_api-0.1.1-py3-none-any.whl.
File metadata
- Download URL: snowflake_sql_api-0.1.1-py3-none-any.whl
- Upload date:
- Size: 37.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2f16808e35b05bbe636add207117645d0e69cb9657c5a59d0c2e1a3dc931d081
|
|
| MD5 |
1674b18453f567c27ab8e2ad0901d435
|
|
| BLAKE2b-256 |
615216bff15149939459cc2a6331e0047ceba050ea39a14a2bb3cdde5089fea1
|
Provenance
The following attestation bundles were made for snowflake_sql_api-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on hampsterx/snowflake-sql-api
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
snowflake_sql_api-0.1.1-py3-none-any.whl -
Subject digest:
2f16808e35b05bbe636add207117645d0e69cb9657c5a59d0c2e1a3dc931d081 - Sigstore transparency entry: 1961172675
- Sigstore integration time:
-
Permalink:
hampsterx/snowflake-sql-api@abf620253a657f549453b7833bbf61091b4dd1b7 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/hampsterx
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@abf620253a657f549453b7833bbf61091b4dd1b7 -
Trigger Event:
push
-
Statement type: