fakesnow

raw JSON →
0.11.6 verified Mon Apr 27 auth: no python

Fake Snowflake Connector for Python. Run, mock and test Snowflake DB locally using DuckDB. Current version: 0.11.6. Release cadence: approximately monthly.

pip install fakesnow
error ModuleNotFoundError: No module named 'snowflake'
cause Missing snowflake-connector-python dependency
fix
pip install snowflake-connector-python
error fakesnow.patch() not found
cause Incorrect import; fakesnow does not export patch if imported incorrectly
fix
Use 'from fakesnow import patch' or 'import fakesnow; fakesnow.patch()'
error snowflake.connector.errors.DatabaseError: 000404 (42S02): Table ... does not exist
cause Unsupported SQL feature in fakesnow (e.g., certain DDL variations)
fix
Simplify the statement or check fakesnow's supported SQL subset (see GitHub README).
breaking Python 3.9 support dropped in v0.11.0
fix Upgrade to Python >=3.10 or pin fakesnow <0.11.0
breaking Information schema column names now uppercase (v0.10.0)
fix Update queries to use uppercase column names (e.g., 'TABLE_NAME' instead of 'table_name') or wrap in double quotes
gotcha fakesnow does NOT mock all Snowflake features. Unsupported SQL may raise errors or produce incorrect results.
fix Check GitHub issues/README for known limitations before relying on fakesnow for complex queries.
gotcha Always call fakesnow.patch() BEFORE importing snowflake.connector if possible, or at least before any connection attempt.
fix Run 'fakesnow.patch()' at the top of your test file or conftest.py, before any snowflake imports.
pip install fakesnow[server]

Patch snowflake.connector, create a fake connection, run SQL locally.

import fakesnow
import snowflake.connector

fakesnow.patch()

conn = snowflake.connector.connect(
    user='test',
    password='test',
    account='test',
    database='MYDB',
    schema='PUBLIC',
    warehouse='test'
)

cur = conn.cursor()
cur.execute('CREATE TABLE users (id INT, name STRING)')
cur.execute("INSERT INTO users VALUES (1, 'Alice')")
cur.execute('SELECT * FROM users')
print(cur.fetchall())