- v2.1.0 (Oct 26, 2026)
- Support SQLAlchemy 2.0.44 through 2.1.x (
SQLAlchemy>=2.0.44,<2.2).- The dialect feature-detects SQLAlchemy 2.1 API changes at import time; no user action is needed beyond upgrading.
- URL database/schema slots now follow Snowflake quoted-identifier rules on both 2.0 and 2.1: slashes inside
"..."are part of the name, not a delimiter. For hand-written URLs, a+in the path is no longer read as a space, and an encoded%2Foutside quotes now separates the database from the schema (previously it stayed in the database name). See the migration guide. - Database/schema names built with
snowflake.sqlalchemy.URLround-trip unchanged on SQLAlchemy 2.0 and 2.1, including a database-only quoted name with special characters (previously left percent-encoded). On SQLAlchemy 2.1,URL.create(...)values are no longer percent-decoded; on 2.0, a database or schema name containing%and no raw"is still decoded. See Special characters in database and schema names. - Reflected
NUMBER(..., 0)/INTEGERcolumns report SQLAlchemy's genericIntegertype affinity. - Window
ROWS/RANGEbounds are compiled as integer literals (no bind-parameter conflicts). - Snowflake custom types declare SQLAlchemy 2.1
operator_classes, so expressions on them no longer emitSADeprecationWarning("does not refer to an OperatorClass"). timedeltaliterals render as SnowflakeINTERVAL '...'constants, so SQLAlchemy 2.1FrameClauseRANGE bounds such astimedelta(days=7)compile toRANGE BETWEEN INTERVAL '7 DAYS' PRECEDING;literal_bindsdate arithmetic no longer raisesCompileError. Negative intervals raise aCompileError(Snowflake interval constants are unsigned). Bound (non-literal)timedeltaparameters are unchanged.- SQLAlchemy 2.1
Delete.using()joins that contain the DELETE target table raise aCompileErrorwith guidance (Snowflake rejects them as "duplicate alias"); join an alias of the target or use a subquery instead.
- Async is opt-in: install
snowflake-sqlalchemy[async](orsqlalchemy[asyncio]) forcreate_async_engine(). SQLAlchemy 2.1 no longer bundlesgreenlet; without the extra the install succeeds but async engine creation raises anImportErrorwith the install command. - Set version bounds for
snowflake-connector-python >=5.1.0,<6.0
- Support SQLAlchemy 2.0.44 through 2.1.x (