NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #261 most downloaded on PyPI
Snowflake Connector for Python
Last release 4 days ago
30 Sep 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
6 versions withdrawn
withdrawn after publishing
9 years old
188 releases · first in 2017
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
One column per quarter.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
OCSP certificate revocation checks are now off unless you opt in. Set ocsp_fail_open=True or ocsp_fail_open=False to enable OCSP. The stored default i
OCSP certificate revocation checks are now off unless you opt in. Set ocsp_fail_open=True or ocsp_fail_open=False to enable OCSP. The stored default is None (unset); only an explicit True/False opts in, so forwarding DEFAULT_CONFIGURATION as kwargs does not turn OCSP on. disable_ocsp_checks=True (or insecure_mode=True) always turns OCSP off, including when ocsp_fail_open is also set. disable_ocsp_checks=False and insecure_mode=False are the stored defaults and are not an opt-in. Connection attribute ocsp_fail_open is no longer a report of whether OCSP is fail-open; it is the stored preference (None = unset, True = fail-open, False = fail-closed). Use _ocsp_mode() / disable_ocsp_checks to see whether checks are actually on. ocsp_response_cache_filename and ocsp_root_certs_dict_lock_timeout do not turn OCSP on; if they are set without an OCSP mode parameter they are ignored and a warning is logged. The SF_OCSP_FAIL_OPEN environment variable still only switches fail-open vs fail-closed after OCSP is already on. Login OCSP_MODE telemetry now reports DISABLE_OCSP_CHECKS by default. The process-global FEATURE_OCSP_MODE is updated by each constructed REST client, except that a later default (OCSP off) client does not overwrite a non-default already stored on the process, and a later FAIL_OPEN client does not overwrite FAIL_CLOSED.
Fixed external-browser (SSO) authentication to validate the Origin header on the local callback server, rejecting tokens delivered from unexpected origins. A trailing slash in the origin (e.g. https://account.snowflakecomputing.com/) is now accepted on par with the bare origin, matching JDBC and other driver behaviour. Preconnect probe connections (empty recv) no longer count against the retry budget and no longer abort the login flow.
Added the SNOWFLAKE_TLS_CIPHERS environment variable to restrict which TLS ciphers the connector offers. It takes a colon-separated list; names beginning with TLS_ are applied as TLS 1.3 cipher suites and the remainder as the cipher list for TLS 1.2 and below, so a single variable covers both. Leaving it unset keeps OpenSSL's defaults unchanged, and an unrecognized cipher name is rejected rather than silently ignored. The restriction covers Snowflake API traffic, cloud-storage (stage) transfers, OCSP/CRL fetches and IdP requests. Requests issued by the AWS and Azure SDKs, and asynchronous connections, are not covered — for TLS 1.3 suites specifically they cannot be, because the Python standard library exposes no API for restricting them.
Raised the minimum pyOpenSSL requirement to 25.3.0, the first version providing set_tls13_ciphersuites. This does not narrow the set of installable versions in practice: earlier releases cap cryptography below 46 and so were already uninstallable alongside the connector's own cryptography>=46.0.5 requirement.
Added the workload_identity_host connection option that overrides the STS host used by AWS Workload Identity Federation, for endpoints the driver cannot derive from the region (such as an interface VPC endpoint). The default STS host is now resolved via botocore so partitions that do not use amazonaws.com (ISO, European Sovereign Cloud, ...) get the correct hostname. A privately routed host cannot be reached by Snowflake on the default GetCallerIdentity path, so a VPC or PrivateLink STS endpoint also requires workload_identity_aws_use_outbound_token=True (SNOW-4017192).
Fixed MD5 computation for Azure clouds (SNOW-4168830).
Follow-up to the v4.7.4 incomplete-result fix ( SNOW-4109042 ): when a successful query-request has an incomplete inline first chunk, the connector re
connect() as a generic 250001: Could not connect to Snowflake backend after N attempt(s) alongside a firewall-troubleshooting hint. The network layer already identified and named such failures, but the authentication layer retried them until the login timeout expired and then replaced the diagnosis. They now surface as NonRetryableTlsError (a subclass of OperationalError keeping the same errno, so existing handlers are unaffected) naming the underlying cause, and are no longer retried. Transient handshake faults (ECONNRESET, unexpected EOF) remain retryable.SNOWFLAKE_MIN_TLS_VERSION environment variable (1.2, 1.3, TLSv1.2 or TLSv1.3, defaulting to TLS 1.2) to raise the minimum TLS version on every outbound connection a synchronous connector makes: the Snowflake API, stage transfers, OCSP/CRL fetches, platform detection, IdP requests, AWS SDK requests (workload identity STS calls and the platform-detection identity probe) and Azure AD token requests made by azure-identity. An unrecognized value is rejected at connect time.Fixed missing retries on transient HTTP failures when fetching an OAuth access token from the IdP token endpoint ( OAUTH_CLIENT_CREDENTIALS and OAUTH_
OAUTH_CLIENT_CREDENTIALS and OAUTH_AUTHORIZATION_CODE). Token requests now retry transport errors, HTTP 408/429, and 5xx responses (SNOW-3984430, #3003).SSLError containing SysCallError(-1, 'Unexpected EOF')) was classified as non-retryable and surfaced as an OperationalError, unlike ECONNRESET. Such handshake Unexpected EOF errors are now retried, on both the sync and async request paths (SNOW-4058589).fetchone(), fetchmany(), fetchall() and cursor iteration silently returning an incomplete result set. A downloaded result chunk holding fewer rows than the back-end reported just ended the iteration, which the fetch methods report as a normal end of results, so callers received fewer rows than the query produced with no exception raised. Such a chunk now raises an OperationalError (errno 252013). Errors raised while iterating a result set are no longer reported as end-of-results either: _fetchone() caught every TypeError and returned None, so a failure anywhere in the download/parse chain was indistinguishable from an exhausted result set. Both the sync and async paths are fixed (SNOW-4109042).Added experimental Python 3.14t (free-threaded CPython) wheel support. Experimental — not intended for production use.
connect() being significantly slower on deep call stacks (e.g. Django apps with several middleware/decorator layers) because get_application_path() used inspect.stack(), which reads and parses the source file of every frame on the stack. It now walks frame references directly instead (SNOW-3691001, #2908).split_statements truncating unquoted URLs containing :// at the //, misreading it as a line comment. The guards added alongside // comment support in 4.7.2 (SNOW-3772985) only recognized file://, so every other scheme (http://, https://, s3://, snow://, azure://) was cut short. Any scheme:// is now recognized, on both the line-comment and block-comment paths (the latter affected globs such as s3://bucket/*.csv) (SNOW-3930192).RuntimeError: UnixFileLock on ... was inherited across fork; construct a new instance when it was written from a forked child process. This could surface on fork-based platforms when fetching results with client_fetch_use_mp=True, where chunk downloads run in worker processes that perform their own certificate revocation checks. The cache's file lock is now re-created when the owning process changes, matching what already happened for the spawn start method.qrmk is present, for both the sync and async result paths (SNOW-3675590).create_batches_from_response() reports chunk-header names with type/length value metadata (SNOW-3675590).create_batches_from_response() reports a structural summary of the response (SNOW-3675590)._format_query_for_log() runs the query through SecretDetector, covering the cursor and connection paths on both sync and async. The cancel-query log paths use the same masking (SNOW-3675590)._format_query_for_log_lazy() wrapper whose __str__ masks only whena handler emits the record (SNOW-3675590).WORKLOAD_IDENTITY authenticator runs only against recognized Snowflake hosts: the connection host is normalized and suffix-anchored against snowflakecomputing.com, .cn, and .mil before the workload-identity flow proceeds. The SNOWFLAKE_WIF_ALLOWED_HOST_SUFFIXES environment variable additively extends the recognized-host list (SNOW-3675580).SF_OCSP_RESPONSE_CACHE_SERVER_URL is set, the connector uses it as the OCSP cache server, including on PrivateLink hosts..privatelink. label, and end at snowflakecomputing.com, .cn, or .mil. Other hosts use the public default cache URL; set SF_OCSP_RESPONSE_CACHE_SERVER_URL to use a different cache server.: and % in the token value. Added patterns for OAuth access and refresh tokens in serialized JSON, for one-time passcodes, and for OAuth client identifiers and secrets. The passcode pattern accepts quoted values. The password pattern requires at least six characters in the value, so ordinary prose following the word "password" is not redacted.Authorization header in error logs (SNOW-3675593).snowflake.connector loggers by default, independent of how application logging is configured. The same filter also covers the third-party loggers the connector uses (botocore, boto3, aiohttp, aiobotocore, aioboto3, vendored urllib3). Set SNOWFLAKE_DISABLE_LOG_SECRET_MASKING=true to opt out; it is honored at emit time, including after import (SNOW-3675583).Fixed a thread leak in the file transfer agent by properly shutting down ThreadPoolExecutors after PUT/GET transfers ( SNOW-3556240 , #2878 ).
split_statements treating // as SQL instead of a line comment, which could merge multiple statements when a // comment contained an apostrophe (SNOW-3772985).250001 Invalid OAuth access token when the cached token was invalid (GS code 390303); the connector now reauthenticates silently (via refresh token if available, otherwise browser) instead of hard-failing. Also fixed fresh processes holding only a cached refresh token going straight to an interactive browser prompt instead of attempting a silent refresh first.login_timeout as 250003: Failed to execute request: Attempted to set connect timeout to <negative value>. Obtaining the one-time token in step 4 can overshoot the login deadline, which made the remaining budget negative; it was then passed to the HTTP layer, which rejected it with an opaque ValueError. A timed-out SAML login now raises 250006 with a message naming login_timeout. Running out of budget while retrying on RefreshTokenError reports the same error instead of failing later with an AttributeError on an empty response (SNOW-3891419).urlparse().hostname always returns lowercase, but the host was compared case-sensitively in _is_snowflake_as_idp, causing Snowflake-as-IdP detection to return False and raising error 251013 (client_id is empty) even for connections that don't require a client ID.Added support for Python 3.14t (free-threaded).
win_arm64 (no cryptography wheels available) and mitmproxy proxy tests on all platforms (transitive dependencies aioquic/pylsqpack lack free-threaded-compatible wheels).python-connector.log not rotating on Windows, and every record being logged twice, when easy logging is enabled via config.toml (SNOW-3680325).
logging.basicConfig() and therefore no longer configures the root logger. python-connector.log now captures only the snowflake.connector, botocore, and boto3.is_valid_url() with urllib.parse.urlparse (SNOW-3392651).reauthenticate() calls _request_tokens() directly instead of looping through prepare(). Token cache is now read exactly once per connection, and _store_tokens() preserves macOS Keychain ACL by never calling remove(). The async OAuth reauthenticate() now runs the synchronous OAuth flow on a worker thread instead of blocking the event loop.offline_access scope for token endpoints on *.snowflakecomputing.com or *.snowflakecomputing.cn, which caused invalid_scope errors. Snowflake custom OAuth expects refresh_token in scope instead. External IdP behavior is unchanged.scale metadata in Arrow result set processing for TIME, TIMESTAMP_NTZ, TIMESTAMP_LTZ, and TIMESTAMP_TZ columns (SNOW-3388299).x-amz-bucket-region response header on each redirect. Redirects are capped at 5 hops.WorkloadIdentityCredential to authenticate via the injected service account credentials. OIDC backward compatibility is also supported.workload_identity_aws_use_outbound_token connection option (default false) to opt into AWS WIF JWT attestation via STS GetWebIdentityToken instead of the default SigV4 GetCallerIdentity method.CREATE VIEW db.schema.obj) on a session with no current schema would populate the connector's cached _schema/_database from the referenced object's namespace. This made get_current_schema() diverge from the server's CURRENT_SCHEMA() and mis-qualified Snowpark temp objects (SNOW-3665226).Fixed python-connector.log not rotating on Windows, and every record being logged twice, when easy logging is enabled via config.toml (SNOW-3680325).
python-connector.log not rotating on Windows, and every record being logged twice, when easy logging is enabled via config.toml (SNOW-3680325).
logging.basicConfig() and therefore no longer configures the root logger. python-connector.log now captures only the snowflake.connector, botocore, and boto3.is_valid_url() with urllib.parse.urlparse (SNOW-3392651).reauthenticate() calls _request_tokens() directly instead of looping through prepare(). Token cache is now read exactly once per connection, and _store_tokens() preserves macOS Keychain ACL by never calling remove(). The async OAuth reauthenticate() now runs the synchronous OAuth flow on a worker thread instead of blocking the event loop.offline_access scope for token endpoints on *.snowflakecomputing.com or *.snowflakecomputing.cn, which caused invalid_scope errors. Snowflake custom OAuth expects refresh_token in scope instead. External IdP behavior is unchanged.scale metadata in Arrow result set processing for TIME, TIMESTAMP_NTZ, TIMESTAMP_LTZ, and TIMESTAMP_TZ columns (SNOW-3388299).[pandas] extra to allow installation of pandas 3.0.0 and later.x-amz-bucket-region response header on each redirect. Redirects are capped at 5 hops.WorkloadIdentityCredential to authenticate via the injected service account credentials. OIDC backward compatibility is also supported.workload_identity_aws_use_outbound_token connection option (default false) to opt into AWS WIF JWT attestation via STS GetWebIdentityToken instead of the default SigV4 GetCallerIdentity method.CREATE VIEW db.schema.obj) on a session with no current schema would populate the connector's cached _schema/_database from the referenced object's namespace. This made get_current_schema() diverge from the server's CURRENT_SCHEMA() and mis-qualified Snowpark temp objects (SNOW-3665226).Dropped support for Python 3.9. The minimum supported version is now Python 3.10.
.so/.dylib/.dll into the install prefix, breaking downstream packagers (e.g. Homebrew) whose audits reject foreign-arch binaries.account_provided, account_with_region, account_org_provided, region_provided, host_provided). No hostname or account value is included. This is gated by the existing server-side CLIENT_TELEMETRY_ENABLED parameter and can additionally be disabled locally by setting SF_TELEMETRY_DISABLE_CONNECTION_SHAPE=true. The telemetry collection is time-boxed and will be removed in a future release.urllib3 to 2.7.0Fixed write_pandas temp stage name collisions (SNOW-3481510). The old PRNG could produce identical name sequences in forked processes (e.g. Notebook k
write_pandas temp stage name collisions (SNOW-3481510). The old PRNG could produce identical name sequences in forked processes (e.g. Notebook kernels), causing CREATE TEMPORARY STAGE to fail with "Object already exists"._is_prefix_equal() compared url1's port against itself instead of url2's port, allowing an attacker to redirect credentials to a different port on the same hostname. Also fixed the default port fallback to use int instead of str for correct comparison when one URL omits the port.executemany with paramstyle="pyformat" to correctly locate the VALUES clause using a balanced-parentheses parser instead of a greedy regex. This fixes incorrect behaviour with nested function calls such as SQLAlchemy @compiles VARIANT patterns (e.g. PARSE_JSON(%(col)s)) and subquery-form INSERTs (SNOW-298756).SNOWFLAKE_ENABLE_AWS_WIF_OUTBOUND_TOKEN environment variable to true. Note: This environment variable will be removed in a future release.SNOWFLAKE_ENABLE_CUSTOM_REVOCATION_ERRORS environment variable is now a no-op.SNOWFLAKE_RUNNING_INSIDE_SPCS environment variable, trim whitespace, and remove configurable token path.metadata.google.internal instead of the IPv4 link-local address, so it works on IPv6-only GCP VMs.write_pandas() with auto_create_table=False and overwrite=True would execute CREATE TABLE IF NOT EXISTS, which required unnecessary OWNERSHIP privilege on the table. Now only TRUNCATE TABLE is executed in this case. Note: users who relied on the table being implicitly created despite auto_create_table=False should set auto_create_table=True instead.account connection parameter so malformed identifiers (for example path-like values or labels outside letters, digits, _, and -) are rejected with ProgrammingError before login (SNOW-1902886).Bump the lower boundary of cryptography to 46.0.5 due to CVE-2026-26007.
Metadata header to use lowercase "true" instead of "True", which caused 400 errors during Azure Workload Identity Federation authentication.crl_download_max_size to be 20MB instead of 200MB, as the previous value was set too high and could cause out-of-memory issues.SF_SKIP_WARNING_FOR_READ_PERMISSIONS_ON_CONFIG_FILE to SF_SKIP_TOKEN_FILE_PERMISSIONS_VERIFICATION. The old variable is still supported but emits a deprecation warning.unsafe_skip_file_permissions_check flag not being respected when reading connections.toml.Deprecated support for custom revocation error classes in OCSP response cache deserialization. By default, only RevocationCheckError exceptions are de…
server_session_keep_alive in SnowflakeConnection skip checking for pending async queries, providing faster connection close times especially when many async queries are executed.RevocationCheckError exceptions are deserialized from OCSP cache. Custom exception classes can be temporarily enabled by setting the SNOWFLAKE_ENABLE_CUSTOM_REVOCATION_ERRORS environment variable to true or 1, but this support will be removed in a future release.urllib3 to 2.6.3force_microseconds_precision to cursor.fetch_arrow_all and cursor.fetch_pandas_all to avoid PyArrow schema incosistency between batches.Added SnowflakeCursor.stats property to expose granular DML statistics (rows inserted, deleted, updated, and duplicates) for operations like CTAS wher
SnowflakeCursor.stats property to expose granular DML statistics (rows inserted, deleted, updated, and duplicates) for operations like CTAS where rowcount is insufficient.SPCS_TOKEN) into login requests when present in SPCS containers.Relaxed pandas dependency requirements for Python below 3.12.
Pin lower versions of dependencies to oldest version without vulnerabilities.
SNOWFLAKE_AUTH_FORCE_SERVER environment variable to force the use of the local-listening server when using the externalbrowser auth method.
oauth_socket_uri connection parameter allowing to separate server and redirect URIs for local OAuth server.Added support for checking certificates revocation using revocation lists (CRLs)
CERT_REVOCATION_CHECK_MODE to CLIENT_ENVIRONMENTworkload_identity_impersonation_path parameter to support service account impersonation for Workload Identity Federation on GCP and AWS workloads onlyget_results_from_sfqid when using DictCursor and executing multiple statements at onceoauth_credentials_in_body parameter supporting an option to send the oauth client credentials in the request bodyECONNRESET errorbotocore and boto3 dependencies by setting SNOWFLAKE_NO_BOTO environment variable during installationOauth authenticator back to DatabaseErrorConfigSourceError with detailed permission information, preventing potential credential tampering.SnowflakeConnection.cursor(cursor_class) to match the type of cursor_classfetchone, fetchmany, fetchall
DictCursor is no longer a subclass of SnowflakeCursor; use SnowflakeCursorBase as a superclass of both.AWS_DEFAULT_REGION variable instead of AWS_REGION for WORKLOAD_IDENTITY authenticatorocsp_root_certs_dict_lock_timeout connection parameter to set the timeout (in seconds) for acquiring the lock on the OCSP root certs dictionary. Default value for this parameter is -1 which indicates no timeout.Remedied SQL injection vulnerability in snowflake.connector.pandas_tools.write_pandas. See more https://github.com/snowflakedb/snowflake-connector-pyt…
v3.18.1(July 15,2026)
v3.18.0(October 03,2025)
v3.17.4(September 22,2025)
urllib3 to 2.5.0 and requests to v2.32.5v3.17.3(September 02,2025)
SF_SKIP_WARNING_FOR_READ_PERMISSIONS_ON_CONFIG_FILE environment variable.create_dataframe call on Snowparkv3.17.2(August 23,2025)
platform_detection_timeout_seconds to zero.v3.17.1(August 17,2025)
infer_schema parameter to write_pandas to perform schema inference on the passed data.snowlake reverted back to non-module.v3.17.0(August 16,2025)
unsafe_skip_file_permissions_check flag to skip file permission checks on the cache and configuration.APPLICATION_PATH within CLIENT_ENVIRONMENT to distinguish between multiple scripts using the Python Connector in the same environment.WORKLOAD_IDENTITY value for the authenticator type.workload_identity_provider and workload_identity_entra_resource parameters.use_vectorized_scanner parameter in the write_pandas function.type_code in ResultMetadata for interval types.snowflake_version property to the connection.OAUTH_TYPE to CLIENT_ENVIROMENT.pyarrow version constrain; versions >= 19 can now be used.external_session_id was not provided in SnowflakeRestful.fetch.Oauth and programmatic_access_token authenticator values.authenticator values.pandas.DataFrame or pyarrow.Table would overflow due to unnecessary precision. A clear error will now be raised if an overflow cannot be prevented.v3.16.0(July 04,2025)
bulk_upload_chunks parameter to write_pandas function. Setting this parameter to True changes the behaviour of write_pandas function to first write all the data chunks to the local disk and then perform the wildcard upload of the chunks folder to the stage. In default behaviour the chunks are being saved, uploaded and deleted one by one.client_fetch_use_mp parameter that enables multiprocessed fetching of result batches.write_pandas special characters usage in the location name.use_virtual_url when building the location for gcs storage client.v3.15.0(Apr 29,2025)
oauth_client_id, oauth_client_secret, oauth_authorization_url, oauth_token_request_url, oauth_redirect_uri, oauth_scope, oauth_disable_pkce, oauth_enable_refresh_tokens and oauth_enable_single_use_refresh_tokens parameters.OAUTH_AUTHORIZATION_CODE value for the parameter authenticator.oauth_client_id, oauth_client_secret, oauth_token_request_url, and oauth_scope parameters.OAUTH_CLIENT_CREDENTIALS value for the parameter authenticator.client_store_temporary_credential property is to be set to true.v3.14.1(April 21, 2025)
client_fetch_threads experimental parameter to better utilize threads for fetching query results.check_arrow_conversion_error_on_every_column connection property that can be set to False to restore previous behaviour in which driver will ignore errors until it occurs in the last column. This flag's purpose is to unblock workflows that may be impacted by the bugfix and will be removed in later releases.requestId), rather than automatically generate a UUID4 to use for the HTTP Request ID.TO_DATE arrow to python conversion when invalid date was followed by the correct one.insecure_mode connection property and replaced it with disable_ocsp_checks with the same behavior as the former property.v3.14.0(March 03, 2025)
write_pandas.unsafe_file_write connection parameter that restores the previous behaviour of saving files downloaded with GET with 644 permissions.v3.13.2(January 29, 2025)
v3.13.1(January 29, 2025)
v3.13.0(January 23,2025)
cosign.private_key authentication type.v3.12.4(December 3,2024)
v3.12.3(October 25,2024)
v3.12.2(September 11,2024)
snowflake.connector.util_text.random_string to reduce the likelihood of collisions.v3.12.1(August 20,2024)
login_timeout as a string raised a TypeError during the login retry step.pathlib instead of os for default config file location resolution.cryptogaphy version pin.snowflake-export-certs (its backing module was already removed long ago)v3.12.0(July 24,2024)
to_pandas() performance by fully parallel downloading logic.private_key.v3.11.0(June 17,2024)
token_file_path connection parameter to read an OAuth token from a file when connecting to Snowflake.debug_arrow_chunk connection parameter to allow debugging raw arrow data in case of arrow data parsing failure.disable_saml_url_check connection parameter to disable SAML URL check in OKTA authentication.: in a query parameter, for instance, https://sso.abc.com/idp/startSSO.ping?PartnerSpId=https://xyz.snowflakecomputing.com/.v3.10.1(May 21, 2024)
v3.10.0(April 29,2024)
v3.9.1(April 22,2024)
v3.9.0(April 20,2024)
$SNOWFLAKE_HOME/config.toml.v3.8.1(April 09, 2024)
write_pandas to skip TABLE IF NOT EXISTS in truncate mode." introduced in v3.8.0 (yanked) as it's a breaking change. write_pandas will be fixed in the future in a non-breaking way.v3.8.0(April 04,2024)
externalbrowser auth in containerized environments
/favicon on success pageSNOWFLAKE_AUTH_SOCKET_REUSE_PORT flag (usage: SNOWFLAKE_AUTH_SOCKET_REUSE_PORT=true) to set the underlying socket's SO_REUSEPORT flag (described in the socket man page)
SF_AUTH_SOCKET_PORT=3037 SNOWFLAKE_AUTH_SOCKET_REUSE_PORT=true poetry run python somescript.pySNOWFLAKE_AUTH_SOCKET_MSG_DONTWAIT flag (usage: SNOWFLAKE_AUTH_SOCKET_MSG_DONTWAIT=true) to make a non-blocking socket.recv call and retry on Error
write_pandas to skip TABLE IF NOT EXISTS in truncate mode.__del__ method.SnowflakeCursor.execute.v3.7.1(February 21, 2024)
write_pandas wasn't truncating the target table.v3.7.0(January 25,2024)
force_return_table to SnowflakeCursor.fetch_arrow_all to force returning pyarrow.Table in case of zero rows.v3.6.0(December 09,2023)
private_key_file and private_key_file_pwd connection parametersexpired to SnowflakeConnection class, that keeps track of whether the connection's master token has expired.v3.5.0(November 13,2023)
snowflake.connector.cursor.NanoarrowUsage.NANOARROW_USAGE.snowflake.connector.cursor.NANOARROW_USAGE.v3.4.1(November 08,2023)
urllib3 to 1.26.18requests to 2.31.0v3.4.0(November 03,2023)
use_logical_type in write_pandas.backoff_policy argument to snowflake.connector.connect allowing for configurable backoff policy between retries of failed requests. See available implementations in the backoff_policies module.socket_timeout argument to snowflake.connector.connect specifying socket read and connect timeout.login_timeout and network_timeout behaviour. Retries of login and network requests are now properly halted after these timeouts expire.urllib.v3.3.1(October 16,2023)
ImportError when the c extensions are not compiled.v3.3.0(October 10,2023)
NANOARROW_USAGE environment variable to allows switching between the nanoarrow converter and the arrow converter. Valid values include:
FOLLOW_SESSION_PARAMETER, which uses the converter configured in the server.DISABLE_NANOARROW, which uses arrow converter, overriding the server setting.ENABLE_NANOARROW, which uses the nanoarrow converter, overriding the server setting.snowflake.connector.cursor.NanoarrowUsage enum, whose members include:
NanoarrowUsage.FOLLOW_SESSION_PARAMETER, which uses the converter configured in the server.NanoarrowUsage.DISABLE_NANOARROW, which uses arrow converter, overriding the server setting.NanoarrowUsage.ENABLE_NANOARROW, which uses the nanoarrow converter, overriding the server setting.snowflake.connector.cursor.NANOARROW_USAGE module variable to allow switching between the nanoarrow converter and the arrow converter. It works in conjunction with the snowflake.connector.cursor.NanoarrowUsage enum.v3.2.1(September 26,2023)
v3.2.0(September 06,2023)
parser -> manager renaming more consistent in snowflake.connector.config_manager module.v3.1.1(August 28,2023)
RSAPublicKey when constructing AuthByKeyPair in addition to raw bytes.proxy_header is missing on SOCKSProxyManager.v3.1.0(July 31,2023)
Added a feature that lets you add connection definitions to the connections.toml configuration file. A connection definition refers to a collection of connection parameters, for example, if you wanted to define a connection named `prod``:
[prod]
account = "my_account"
user = "my_user"
password = "my_password"
By default, we look for the connections.toml file in the location specified in the SNOWFLAKE_HOME environment variable (default: ~/.snowflake). If this folder does not exist, the Python connector looks for the file in the platformdirs location, as follows:
~/.config/snowflake/, but follows XDG settings~/Library/Application Support/snowflake/%USERPROFILE%\AppData\Local\snowflake\You can determine which file is used by running the following command:
python -c "from snowflake.connector.constants import CONNECTIONS_FILE; print(str(CONNECTIONS_FILE))"
Bumped cryptography dependency from <41.0.0,>=3.1.0 to >=3.1.0,<42.0.0.
Improved OCSP response caching to remove tmp cache files on Windows.
Improved OCSP response caching to reduce the times of disk writing.
Added a parameter server_session_keep_alive in SnowflakeConnection that skips session deletion when client connection closes.
Tightened our pinning of platformdirs, to prevent their new releases breaking us.
Fixed a bug where SFPlatformDirs would incorrectly append application_name/version to its path.
Added retry reason for queries that are retried by the client.
Fixed a bug where write_pandas fails when user does not have the privilege to create stage or file format in the target schema, but has the right privilege for the current schema.
Remove Python 3.7 support.
Worked around a segfault which sometimes occurred during cache serialization in multi-threaded scenarios.
Improved error handling of connection reset error.
Fixed a bug about deleting the temporary files happened when running PUT command.
Allowed to pass type_mapper to fetch_pandas_batches() and fetch_pandas_all().
Fixed a bug where pickle.dump segfaults during cache serialization in multi-threaded scenarios.
Improved retry logic for okta authentication to refresh token if authentication gets throttled.
Note that this release does not include the changes introduced in the previous 3.1.0a1 release. Those will be released at a later time.
v3.0.4(May 23,2023)
cursor.execute() could modify the argument statement_params dictionary object when executing a multistatement query.SnowflakeCursor.nextset before fetching the result of the first query if the cursor runs an async multistatement query._prefetch_hook() was not called before yielding results of execute_async().v3.0.3(April 20, 2023)
snowflake.connector.pandas_tool.write_pandas.snowflake.connector.pandas_tool.write_pandas.snowflake.connector.pandas_tool.write_pandas.SnowflakeCursor.execute method.403: Forbidden HTTP response for a login-request.v3.0.2(March 23, 2023)
put command on AWS raised AttributeError when uploading file composed of multiple parts.SnowflakeCursor.fetch_arrow_all and SnowflakeCursor.fetchall.snowflake.connector.util_text.split_statements swallows the final line break in the case when there are no space between lines.v3.0.1(February 28, 2023)
AuthByKeyPair.handle_timeout should pass keyword arguments instead of positional arguments when calling AuthByKeyPair.prepare.v3.0.0(January 26, 2023)
fetch_arrow_all and fetch_arrow_batches to handle async query resultsv2.9.0(December 9, 2022)
cursor.execute and cursor.executemany
MULTI_STATEMENT_COUNT can be altered at the account, session, or statement level. An additional argument, num_statements, can be provided to execute to use this parameter at the statement level. It must be provided to executemany to submit a multi-statement query through the method. Note that bulk insert optimizations available through executemany are not available when submitting multi-statement queries.
get_results_from_sfqid to retrieve resultsSnowflakeCursor.nextset() as specified in the DB 2.0 API (PEP-249), to iterate through each statements results
execute (or get_results_from_sfqid if asynchronous) through the existing fetch*() methodsv2.8.3(November 28,2022)
v2.8.2(November 18,2022)
v2.8.1(October 30,2022)
v2.8.0(September 27,2022)
v2.7.12(August 26,2022)
v2.7.11(July 26,2022)
v2.7.10(July 22,2022)
lastrowid to SnowflakeCursor in compliance with PEP249.v2.7.9(June 26,2022)
v2.7.8(May 28,2022)
v2.7.7(April 30,2022)
v2.7.6(March 17,2022)
v2.7.5(March 17,2022)
v2.7.4(February 05,2022)
DatabaseError was thrown when executing against a closed cursor instead of InterfaceErrorexecutemany would crash if an iterator was supplied as argsNOT NULL constraint raised DatabaseError instead of IntegrityErrorv2.7.3(January 22,2022)
v2.7.2(December 17,2021)
v2.7.1(November 19,2021)
v2.7.0(October 25,2021)
v2.6.2(September 27,2021)
v2.6.1(September 16,2021)
v2.6.0(August 29,2021)
v2.5.1(July 31,2021)
v2.5.0(July 22,2021)
insert into ... commandsv2.4.6(June 25,2021)
v2.4.5(June 15,2021)
v2.4.4(May 30,2021)
v2.4.3(April 29,2021)
v2.4.2(April 03,2021)
v2.4.1(March 04,2021)
autocommitv2.4.0(March 04,2021)
v2.3.10(February 01,2021)
v2.3.9(January 27,2021)
v2.3.8(January 14,2021)
v2.3.7(December 10,2020)
v2.3.6(November 16,2020)
v2.3.5(November 03,2020)
v2.3.4(October 26,2020)
v2.3.3(October 05,2020)
v2.3.2(September 14,2020)
v2.3.1(August 25,2020)
v2.3.0(August 24,2020)
v2.2.10(August 03,2020)
v2.2.9(July 13,2020)
v2.2.8(June 22,2020)
v2.2.7(June 1,2020)
v2.2.6(May 11,2020)
v2.2.5(April 30,2020)
v2.2.4(April 10,2020)
v2.2.3(March 30,2020)
v2.2.2(March 9,2020)
v2.2.1(February 18,2020)
v2.2.0(January 27,2020)
v2.1.3(January 06,2020)
v2.1.2(December 16,2019)
v2.1.1(December 12,2019)
v2.1.0(December 2,2019)
ssl_context optionsv2.0.4(November 13,2019)
v2.0.3(November 1,2019)
v2.0.2(October 21,2019)
v2.0.1(October 04,2019)
v2.0.0(September 30,2019)
v1.9.1(October 4,2019)
v1.9.0(August 26,2019) REMOVED from pypi due to dependency compatibility issues
v1.8.7(August 12,2019)
v1.8.6(July 29,2019)
v1.8.5(July 15,2019)
v1.8.4(July 01,2019)
v1.8.3(June 17,2019)
v1.8.2 (June 03,2019)
v1.8.1 (May 20,2019)
v1.8.0 (May 10, 2019)
numpy.bool_ in binding typev1.7.11 (April 22, 2019)
v1.7.10 (April 8, 2019)
v1.7.9 (March 25,2019)
v1.7.8 (March 12,2019)
v1.7.7 (February 22,2019)
v1.7.6 (February 08,2019)
v1.7.5 (January 25, 2019)
v1.7.4 (January 3, 2019)
CLIENT_PREFETCH_THREADS to download the result set.v1.7.3 (December 11, 2018)
v1.7.2 (December 4, 2018)
v1.7.1 (November 27, 2018)
v1.7.0 (November 13, 2018)
v1.6.12 (October 30, 2018)
boto3 and botocore version dependeny.client_session_keep_alive_heartbeat_frequency to control heartbeat timings for client_session_keep_alive.v1.6.11 (October 23, 2018)
request_guid to each HTTP request for tracing.v1.6.10 (September 25, 2018)
client_session_keep_alive support.datetime for TIMESTAMP type in qmark binding mode. PR #118 (@rhlahuja)v1.6.9 (September 13, 2018)
v1.6.8 (August 30, 2018)
boto3 and botocore version dependeny.v1.6.7 (August 22, 2018)
v1.6.6 (August 9, 2018)
pycryptodome with pycryptodomex to avoid namespace conflict with PyCrypto.v1.6.5 (July 13, 2018)
v1.6.4 (July 5, 2018)
v1.6.3 (June 14, 2018)
v1.6.2 (June 7, 2018)
v1.6.1 (May 17, 2018)
login_timeout attribute is int.v1.6.0 (May 3, 2018)
v1.5.8 (April 26, 2018)
v1.5.7 (April 19, 2018)
v1.5.6 (April 5, 2018)
boto3 and botocore version dependeny.v1.5.5 (March 22, 2018)
cryptography dependency.v1.5.4 (March 15, 2018)
pyasn and pyasn1-modules version requirementspycryptodome version requirements. No 3.5.0 should be used.v1.5.3 (March 9, 2018)
pyasn1 for OCSP check in Python 2. Python 3 continue using asn1crypto for better performance.pycryptodome version to less than 3.5.0 for Issue 65.v1.5.2 (March 1, 2018)
boto3 and botocore version dependeny.v1.5.1 (February 15, 2018)
v1.5.0 (January 26, 2018)
pyasn1 and pyasn1-modules from the dependency.v1.4.17 (January 19, 2018)
pyasn1 and pyasn1-modules version dependency. PR 48 (@baxen)pyasn1 with asn1crypto Not activated yet.v1.4.16 (January 16, 2018)
v1.4.15 (January 11, 2018)
v1.4.14 (December 14, 2017)
v1.4.13 (November 30, 2017)
boto3 and botocore version dependeny.v1.4.12 (November 16, 2017)
qmark and numeric paramstyle support for server side binding.timezone session parameter support to connections.v1.4.11 (November 9, 2017)
v1.4.10 (October 26, 2017)
cryptography, boto3 and botocore version dependeny.v1.4.9 (October 10, 2017)
pyasn1 upgrade.v1.4.8 (October 5, 2017)
pyasn1. Relaxed the dependency.v1.4.7 (September 20, 2017)
v1.4.6 (September 14, 2017)
v1.4.5 (August 31, 2017)
v1.4.4 (August 24, 2017)
v1.4.3 (August 17, 2017)
certifi to the dependent component list to mitigate CA root certificate out of date issue.boto3 and botocore.cryptography and pyOpenSSL version dependeny change.validate_default_parameters to validate the default database, schema and warehouse. If the specified object doesn't exist, it raises an error.v1.4.2 (August 3, 2017)
pyasn1 and pyasn1-modulesv1.4.1 (July 26, 2017)
pyasn1 and pyasn1-modules versions to 0.2.3 and 0.0.9, respectivelyv1.4.0 (July 6, 2017)
boto3, botocore, cffi and cryptography and pyOpenSSLv1.3.18 (June 15, 2017)
v1.3.17 (June 1, 2017)
v1.3.16 (April 20, 2017)
DATE causing [Error 22] Invalid argument on WindowsRuntimeError in requestsv1.3.15 (March 30, 2017)
OpenSSL.SSL.SysCallError 10053 with lower concurrencyraw_msg attribute to Error classv1.3.14 (February 24, 2017)
sfqid and sqlstate to the results from query results.login_timeout and network_timeout.cryptography to 1.7.2, boto3 to 1.4.4 and botocore to 1.5.14.v1.3.13 (February 9, 2017)
login_timeout and network_timeout parameters to the Connection objects.v1.3.12 (February 2, 2017)
region parameter. One character was truncated from the tail of account namev1.3.11 (January 27, 2017)
v1.3.10 (January 26, 2017)
region option to support EU deployments betterv1.3.9 (January 16, 2017)
botocore to 1.4.93 to fix and boto3 to 1.4.3 to fix the HTTPS request failure in Python 3.6v1.3.8 (January 12, 2017)
six package to support both PY2 and PY3 for some functionscryptography to 1.7.1 to address MacOS Python 3.6 build issue.v1.3.7 (December 8, 2016)
v1.3.6 (December 1, 2016)
cryptography to 1.5.3, pyOpenSSL to 16.2.0 and cffi to 1.9.1.v1.3.5 (November 17, 2016)
Bad Request errorv1.3.4 (November 3, 2016)
quoted_name data type support for binding by SQLAlchemyparquiet file in PUT commandv1.3.3 (October 20, 2016)
botocore to 1.4.37 due to potential regression.v1.3.2 (October 12, 2016)
botocore to 1.4.52.PUT, GET commands and fetching large result set.v1.3.1 (September 30, 2016)
v1.3.0 (September 26, 2016)
Added support for the BINARY data type, which enables support for more Python data types:
Python 3:
bytes and bytearray can be used for binding.bytes is also used for fetching BINARY data type.Python 2:
bytearray can be used for bindingstr is used for fetching BINARY data type.Added proxy_user and proxy_password connection parameters for proxy servers that require authentication.
v1.2.8 (August 16, 2016)
botocore to 1.4.37.Connection.execute_string and Connection.execute_stream to run multiple statements in a string and stream.v1.2.7 (July 31, 2016)
snowflake.cursor.rowcount for INSERT ALL.use_accelerate_endpoint in PUT and GET if Transfer acceleration is enabled for the S3 bucket.python-future that loads test.py in the current directory.v1.2.6 (July 13, 2016)
v1.2.5 (July 8, 2016)
S3UploadFailedError and RetriesExceededError in PUT and GET, respectively.v1.2.4 (July 6, 2016)
max_connection_pool parameter to Connection so that you can specify the maximum number of HTTP/HTTPS connections in the pool.v1.2.3 (June 29, 2016)
v1.2.2 (June 21, 2016)
botocore to 1.4.26.v1.2.1 (June 13, 2016)
v1.2.0 (June 10, 2016)
v1.1.5 (June 2, 2016)
boto3 to 1.3.1 and botocore and 1.4.22.snowflake.cursor.rowcount for DML by snowflake.cursor.executemany.numpy data type binding support. numpy.intN, numpy.floatN and numpy.datetime64 can be bound and fetched.v1.1.4 (May 21, 2016)
cffi to 1.6.0.v1.1.3 (May 5, 2016)
cryptography to 1.3.2.v1.1.2 (May 4, 2016)
tzlocal optional.v1.1.1 (Apr 11, 2016)
cryptography to 1.3.1 and pyOpenSSL to 16.0.0.v1.1.0 (Apr 4, 2016)
bzip2 support in PUT command. This feature requires a server upgrade.snowflake._vendor with the dependency of boto3 1.3.0 and botocore 1.4.2.v1.0.7 (Mar 21, 2016)
pyOpenSSL at 0.15.1.v1.0.6 (Mar 15, 2016)
cryptography to 1.2.3.TIME data type, which is now a Snowflake supported data type. This feature requires a server upgrade.snowflake.connector.DistCursor to fetch the results in dict instead of tuple.v1.0.5 (Mar 1, 2016)
cryptography to 1.2.2 and cffi to 1.5.2.TIMESTAMP_LTZ to datetime in queries.v1.0.4 (Feb 15, 2016)
ETIMEDOUT and ECONNRESET.PUT command. They used to be in the same directory as the source data files.PUT commands if the token expires.v1.0.3 (Jan 13, 2016)
Added support for the BOOLEAN data type (i.e. TRUE or FALSE). This changes the behavior of the binding for the bool type object:
bool was bound as a numeric value (i.e. 1 for True, 0 for False).bool is bound as native SQL data (i.e. TRUE or FALSE).Added the autocommit method to the Connection object:
autocommit mode is ON (i.e. each DML statement commits the change).autocommit mode is OFF, the commit and rollback methods are enabled.Avoid segfault issue for cryptography 1.2 in Mac OSX by using 1.1 until resolved.
v1.0.2 (Dec 15, 2015)
boto3 1.2.2, botocore 1.3.12.SSLv3 mapping from the initial table.v1.0.1 (Dec 8, 2015)
v1.0.0 (Dec 1, 2015)
v3.18.1(July 15,2026)
v3.18.0(October 03,2025)
v3.17.4(September 22,2025)
urllib3 to 2.5.0 and requests to v2.32.5v3.17.3(September 02,2025)
SF_SKIP_WARNING_FOR_READ_PERMISSIONS_ON_CONFIG_FILE environment variable.create_dataframe call on Snowparkv3.17.2(August 23,2025)
platform_detection_timeout_seconds to zero.v3.17.1(August 17,2025)
infer_schema parameter to write_pandas to perform schema inference on the passed data.snowlake reverted back to non-module.v3.17.0(August 16,2025)
unsafe_skip_file_permissions_check flag to skip file permission checks on the cache and configuration.APPLICATION_PATH within CLIENT_ENVIRONMENT to distinguish between multiple scripts using the Python Connector in the same environment.WORKLOAD_IDENTITY value for the authenticator type.workload_identity_provider and workload_identity_entra_resource parameters.use_vectorized_scanner parameter in the write_pandas function.type_code in ResultMetadata for interval types.snowflake_version property to the connection.OAUTH_TYPE to CLIENT_ENVIROMENT.pyarrow version constrain; versions >= 19 can now be used.external_session_id was not provided in SnowflakeRestful.fetch.Oauth and programmatic_access_token authenticator values.authenticator values.pandas.DataFrame or pyarrow.Table would overflow due to unnecessary precision. A clear error will now be raised if an overflow cannot be prevented.v3.16.0(July 04,2025)
bulk_upload_chunks parameter to write_pandas function. Setting this parameter to True changes the behaviour of write_pandas function to first write all the data chunks to the local disk and then perform the wildcard upload of the chunks folder to the stage. In default behaviour the chunks are being saved, uploaded and deleted one by one.client_fetch_use_mp parameter that enables multiprocessed fetching of result batches.write_pandas special characters usage in the location name.use_virtual_url when building the location for gcs storage client.v3.15.0(Apr 29,2025)
oauth_client_id, oauth_client_secret, oauth_authorization_url, oauth_token_request_url, oauth_redirect_uri, oauth_scope, oauth_disable_pkce, oauth_enable_refresh_tokens and oauth_enable_single_use_refresh_tokens parameters.OAUTH_AUTHORIZATION_CODE value for the parameter authenticator.oauth_client_id, oauth_client_secret, oauth_token_request_url, and oauth_scope parameters.OAUTH_CLIENT_CREDENTIALS value for the parameter authenticator.client_store_temporary_credential property is to be set to true.v3.14.1(April 21, 2025)
client_fetch_threads experimental parameter to better utilize threads for fetching query results.check_arrow_conversion_error_on_every_column connection property that can be set to False to restore previous behaviour in which driver will ignore errors until it occurs in the last column. This flag's purpose is to unblock workflows that may be impacted by the bugfix and will be removed in later releases.requestId), rather than automatically generate a UUID4 to use for the HTTP Request ID.TO_DATE arrow to python conversion when invalid date was followed by the correct one.insecure_mode connection property and replaced it with disable_ocsp_checks with the same behavior as the former property.v3.14.0(March 03, 2025)
write_pandas.unsafe_file_write connection parameter that restores the previous behaviour of saving files downloaded with GET with 644 permissions.v3.13.2(January 29, 2025)
v3.13.1(January 29, 2025)
v3.13.0(January 23,2025)
cosign.private_key authentication type.v3.12.4(December 3,2024)
v3.12.3(October 25,2024)
v3.12.2(September 11,2024)
snowflake.connector.util_text.random_string to reduce the likelihood of collisions.v3.12.1(August 20,2024)
login_timeout as a string raised a TypeError during the login retry step.pathlib instead of os for default config file location resolution.cryptogaphy version pin.snowflake-export-certs (its backing module was already removed long ago)v3.12.0(July 24,2024)
to_pandas() performance by fully parallel downloading logic.private_key.v3.11.0(June 17,2024)
token_file_path connection parameter to read an OAuth token from a file when connecting to Snowflake.debug_arrow_chunk connection parameter to allow debugging raw arrow data in case of arrow data parsing failure.disable_saml_url_check connection parameter to disable SAML URL check in OKTA authentication.: in a query parameter, for instance, https://sso.abc.com/idp/startSSO.ping?PartnerSpId=https://xyz.snowflakecomputing.com/.v3.10.1(May 21, 2024)
v3.10.0(April 29,2024)
v3.9.1(April 22,2024)
v3.9.0(April 20,2024)
$SNOWFLAKE_HOME/config.toml.v3.8.1(April 09, 2024)
write_pandas to skip TABLE IF NOT EXISTS in truncate mode." introduced in v3.8.0 (yanked) as it's a breaking change. write_pandas will be fixed in the future in a non-breaking way.v3.8.0(April 04,2024)
externalbrowser auth in containerized environments
/favicon on success pageSNOWFLAKE_AUTH_SOCKET_REUSE_PORT flag (usage: SNOWFLAKE_AUTH_SOCKET_REUSE_PORT=true) to set the underlying socket's SO_REUSEPORT flag (described in the socket man page)
SF_AUTH_SOCKET_PORT=3037 SNOWFLAKE_AUTH_SOCKET_REUSE_PORT=true poetry run python somescript.pySNOWFLAKE_AUTH_SOCKET_MSG_DONTWAIT flag (usage: SNOWFLAKE_AUTH_SOCKET_MSG_DONTWAIT=true) to make a non-blocking socket.recv call and retry on Error
write_pandas to skip TABLE IF NOT EXISTS in truncate mode.__del__ method.SnowflakeCursor.execute.v3.7.1(February 21, 2024)
write_pandas wasn't truncating the target table.v3.7.0(January 25,2024)
force_return_table to SnowflakeCursor.fetch_arrow_all to force returning pyarrow.Table in case of zero rows.v3.6.0(December 09,2023)
private_key_file and private_key_file_pwd connection parametersexpired to SnowflakeConnection class, that keeps track of whether the connection's master token has expired.v3.5.0(November 13,2023)
snowflake.connector.cursor.NanoarrowUsage.NANOARROW_USAGE.snowflake.connector.cursor.NANOARROW_USAGE.v3.4.1(November 08,2023)
urllib3 to 1.26.18requests to 2.31.0v3.4.0(November 03,2023)
use_logical_type in write_pandas.backoff_policy argument to snowflake.connector.connect allowing for configurable backoff policy between retries of failed requests. See available implementations in the backoff_policies module.socket_timeout argument to snowflake.connector.connect specifying socket read and connect timeout.login_timeout and network_timeout behaviour. Retries of login and network requests are now properly halted after these timeouts expire.urllib.v3.3.1(October 16,2023)
ImportError when the c extensions are not compiled.v3.3.0(October 10,2023)
NANOARROW_USAGE environment variable to allows switching between the nanoarrow converter and the arrow converter. Valid values include:
FOLLOW_SESSION_PARAMETER, which uses the converter configured in the server.DISABLE_NANOARROW, which uses arrow converter, overriding the server setting.ENABLE_NANOARROW, which uses the nanoarrow converter, overriding the server setting.snowflake.connector.cursor.NanoarrowUsage enum, whose members include:
NanoarrowUsage.FOLLOW_SESSION_PARAMETER, which uses the converter configured in the server.NanoarrowUsage.DISABLE_NANOARROW, which uses arrow converter, overriding the server setting.NanoarrowUsage.ENABLE_NANOARROW, which uses the nanoarrow converter, overriding the server setting.snowflake.connector.cursor.NANOARROW_USAGE module variable to allow switching between the nanoarrow converter and the arrow converter. It works in conjunction with the snowflake.connector.cursor.NanoarrowUsage enum.v3.2.1(September 26,2023)
v3.2.0(September 06,2023)
parser -> manager renaming more consistent in snowflake.connector.config_manager module.v3.1.1(August 28,2023)
RSAPublicKey when constructing AuthByKeyPair in addition to raw bytes.proxy_header is missing on SOCKSProxyManager.v3.1.0(July 31,2023)
Added a feature that lets you add connection definitions to the connections.toml configuration file. A connection definition refers to a collection of connection parameters, for example, if you wanted to define a connection named `prod``:
[prod]
account = "my_account"
user = "my_user"
password = "my_password"By default, we look for the connections.toml file in the location specified in the SNOWFLAKE_HOME environment variable (default: ~/.snowflake). If this folder does not exist, the Python connector looks for the file in the platformdirs location, as follows:
~/.config/snowflake/, but follows XDG settings~/Library/Application Support/snowflake/%USERPROFILE%\AppData\Local\snowflake\You can determine which file is used by running the following command:
python -c "from snowflake.connector.constants import CONNECTIONS_FILE; print(str(CONNECTIONS_FILE))"
Bumped cryptography dependency from <41.0.0,>=3.1.0 to >=3.1.0,<42.0.0.
Improved OCSP response caching to remove tmp cache files on Windows.
Improved OCSP response caching to reduce the times of disk writing.
Added a parameter server_session_keep_alive in SnowflakeConnection that skips session deletion when client connection closes.
Tightened our pinning of platformdirs, to prevent their new releases breaking us.
Fixed a bug where SFPlatformDirs would incorrectly append application_name/version to its path.
Added retry reason for queries that are retried by the client.
Fixed a bug where write_pandas fails when user does not have the privilege to create stage or file format in the target schema, but has the right privilege for the current schema.
Remove Python 3.7 support.
Worked around a segfault which sometimes occurred during cache serialization in multi-threaded scenarios.
Improved error handling of connection reset error.
Fixed a bug about deleting the temporary files happened when running PUT command.
Allowed to pass type_mapper to fetch_pandas_batches() and fetch_pandas_all().
Fixed a bug where pickle.dump segfaults during cache serialization in multi-threaded scenarios.
Improved retry logic for okta authentication to refresh token if authentication gets throttled.
Note that this release does not include the changes introduced in the previous 3.1.0a1 release. Those will be released at a later time.
v3.0.4(May 23,2023)
cursor.execute() could modify the argument statement_params dictionary object when executing a multistatement query.SnowflakeCursor.nextset before fetching the result of the first query if the cursor runs an async multistatement query._prefetch_hook() was not called before yielding results of execute_async().v3.0.3(April 20, 2023)
snowflake.connector.pandas_tool.write_pandas.snowflake.connector.pandas_tool.write_pandas.snowflake.connector.pandas_tool.write_pandas.SnowflakeCursor.execute method.403: Forbidden HTTP response for a login-request.v3.0.2(March 23, 2023)
put command on AWS raised AttributeError when uploading file composed of multiple parts.SnowflakeCursor.fetch_arrow_all and SnowflakeCursor.fetchall.snowflake.connector.util_text.split_statements swallows the final line break in the case when there are no space between lines.v3.0.1(February 28, 2023)
AuthByKeyPair.handle_timeout should pass keyword arguments instead of positional arguments when calling AuthByKeyPair.prepare.v3.0.0(January 26, 2023)
fetch_arrow_all and fetch_arrow_batches to handle async query resultsv2.9.0(December 9, 2022)
cursor.execute and cursor.executemany
MULTI_STATEMENT_COUNT can be altered at the account, session, or statement level. An additional argument, num_statements, can be provided to execute to use this parameter at the statement level. It must be provided to executemany to submit a multi-statement query through the method. Note that bulk insert optimizations available through executemany are not available when submitting multi-statement queries.
get_results_from_sfqid to retrieve resultsSnowflakeCursor.nextset() as specified in the DB 2.0 API (PEP-249), to iterate through each statements results
execute (or get_results_from_sfqid if asynchronous) through the existing fetch*() methodsv2.8.3(November 28,2022)
v2.8.2(November 18,2022)
v2.8.1(October 30,2022)
v2.8.0(September 27,2022)
v2.7.12(August 26,2022)
v2.7.11(July 26,2022)
v2.7.10(July 22,2022)
lastrowid to SnowflakeCursor in compliance with PEP249.v2.7.9(June 26,2022)
v2.7.8(May 28,2022)
v2.7.7(April 30,2022)
v2.7.6(March 17,2022)
v2.7.5(March 17,2022)
v2.7.4(February 05,2022)
DatabaseError was thrown when executing against a closed cursor instead of InterfaceErrorexecutemany would crash if an iterator was supplied as argsNOT NULL constraint raised DatabaseError instead of IntegrityErrorv2.7.3(January 22,2022)
v2.7.2(December 17,2021)
v2.7.1(November 19,2021)
v2.7.0(October 25,2021)
v2.6.2(September 27,2021)
v2.6.1(September 16,2021)
v2.6.0(August 29,2021)
v2.5.1(July 31,2021)
v2.5.0(July 22,2021)
insert into ... commandsv2.4.6(June 25,2021)
v2.4.5(June 15,2021)
v2.4.4(May 30,2021)
v2.4.3(April 29,2021)
v2.4.2(April 03,2021)
v2.4.1(March 04,2021)
autocommitv2.4.0(March 04,2021)
v2.3.10(February 01,2021)
v2.3.9(January 27,2021)
v2.3.8(January 14,2021)
v2.3.7(December 10,2020)
v2.3.6(November 16,2020)
v2.3.5(November 03,2020)
v2.3.4(October 26,2020)
v2.3.3(October 05,2020)
v2.3.2(September 14,2020)
v2.3.1(August 25,2020)
v2.3.0(August 24,2020)
v2.2.10(August 03,2020)
v2.2.9(July 13,2020)
v2.2.8(June 22,2020)
v2.2.7(June 1,2020)
v2.2.6(May 11,2020)
v2.2.5(April 30,2020)
v2.2.4(April 10,2020)
v2.2.3(March 30,2020)
v2.2.2(March 9,2020)
v2.2.1(February 18,2020)
v2.2.0(January 27,2020)
v2.1.3(January 06,2020)
v2.1.2(December 16,2019)
v2.1.1(December 12,2019)
v2.1.0(December 2,2019)
ssl_context optionsv2.0.4(November 13,2019)
v2.0.3(November 1,2019)
v2.0.2(October 21,2019)
v2.0.1(October 04,2019)
v2.0.0(September 30,2019)
v1.9.1(October 4,2019)
v1.9.0(August 26,2019) REMOVED from pypi due to dependency compatibility issues
v1.8.7(August 12,2019)
v1.8.6(July 29,2019)
v1.8.5(July 15,2019)
v1.8.4(July 01,2019)
v1.8.3(June 17,2019)
v1.8.2 (June 03,2019)
v1.8.1 (May 20,2019)
v1.8.0 (May 10, 2019)
numpy.bool_ in binding typev1.7.11 (April 22, 2019)
v1.7.10 (April 8, 2019)
v1.7.9 (March 25,2019)
v1.7.8 (March 12,2019)
v1.7.7 (February 22,2019)
v1.7.6 (February 08,2019)
v1.7.5 (January 25, 2019)
v1.7.4 (January 3, 2019)
CLIENT_PREFETCH_THREADS to download the result set.v1.7.3 (December 11, 2018)
v1.7.2 (December 4, 2018)
v1.7.1 (November 27, 2018)
v1.7.0 (November 13, 2018)
v1.6.12 (October 30, 2018)
boto3 and botocore version dependeny.client_session_keep_alive_heartbeat_frequency to control heartbeat timings for client_session_keep_alive.v1.6.11 (October 23, 2018)
request_guid to each HTTP request for tracing.v1.6.10 (September 25, 2018)
client_session_keep_alive support.datetime for TIMESTAMP type in qmark binding mode. PR #118 (@rhlahuja)v1.6.9 (September 13, 2018)
v1.6.8 (August 30, 2018)
boto3 and botocore version dependeny.v1.6.7 (August 22, 2018)
v1.6.6 (August 9, 2018)
pycryptodome with pycryptodomex to avoid namespace conflict with PyCrypto.v1.6.5 (July 13, 2018)
v1.6.4 (July 5, 2018)
v1.6.3 (June 14, 2018)
v1.6.2 (June 7, 2018)
v1.6.1 (May 17, 2018)
login_timeout attribute is int.v1.6.0 (May 3, 2018)
v1.5.8 (April 26, 2018)
v1.5.7 (April 19, 2018)
v1.5.6 (April 5, 2018)
boto3 and botocore version dependeny.v1.5.5 (March 22, 2018)
cryptography dependency.v1.5.4 (March 15, 2018)
pyasn and pyasn1-modules version requirementspycryptodome version requirements. No 3.5.0 should be used.v1.5.3 (March 9, 2018)
pyasn1 for OCSP check in Python 2. Python 3 continue using asn1crypto for better performance.pycryptodome version to less than 3.5.0 for Issue 65.v1.5.2 (March 1, 2018)
boto3 and botocore version dependeny.v1.5.1 (February 15, 2018)
v1.5.0 (January 26, 2018)
pyasn1 and pyasn1-modules from the dependency.v1.4.17 (January 19, 2018)
pyasn1 and pyasn1-modules version dependency. PR 48 (@baxen)pyasn1 with asn1crypto Not activated yet.v1.4.16 (January 16, 2018)
v1.4.15 (January 11, 2018)
v1.4.14 (December 14, 2017)
v1.4.13 (November 30, 2017)
boto3 and botocore version dependeny.v1.4.12 (November 16, 2017)
qmark and numeric paramstyle support for server side binding.timezone session parameter support to connections.v1.4.11 (November 9, 2017)
v1.4.10 (October 26, 2017)
cryptography, boto3 and botocore version dependeny.v1.4.9 (October 10, 2017)
pyasn1 upgrade.v1.4.8 (October 5, 2017)
pyasn1. Relaxed the dependency.v1.4.7 (September 20, 2017)
v1.4.6 (September 14, 2017)
v1.4.5 (August 31, 2017)
v1.4.4 (August 24, 2017)
v1.4.3 (August 17, 2017)
certifi to the dependent component list to mitigate CA root certificate out of date issue.boto3 and botocore.cryptography and pyOpenSSL version dependeny change.validate_default_parameters to validate the default database, schema and warehouse. If the specified object doesn't exist, it raises an error.v1.4.2 (August 3, 2017)
pyasn1 and pyasn1-modulesv1.4.1 (July 26, 2017)
pyasn1 and pyasn1-modules versions to 0.2.3 and 0.0.9, respectivelyv1.4.0 (July 6, 2017)
boto3, botocore, cffi and cryptography and pyOpenSSLv1.3.18 (June 15, 2017)
v1.3.17 (June 1, 2017)
v1.3.16 (April 20, 2017)
DATE causing [Error 22] Invalid argument on WindowsRuntimeError in requestsv1.3.15 (March 30, 2017)
OpenSSL.SSL.SysCallError 10053 with lower concurrencyraw_msg attribute to Error classv1.3.14 (February 24, 2017)
sfqid and sqlstate to the results from query results.login_timeout and network_timeout.cryptography to 1.7.2, boto3 to 1.4.4 and botocore to 1.5.14.v1.3.13 (February 9, 2017)
login_timeout and network_timeout parameters to the Connection objects.v1.3.12 (February 2, 2017)
region parameter. One character was truncated from the tail of account namev1.3.11 (January 27, 2017)
v1.3.10 (January 26, 2017)
region option to support EU deployments better</Note truncated.
Added support for pandas conversion for Day-time and Year-Month Interval types
Added support for intermediate certificates as roots when they are stored in the trust store
urllib3 to 2.5.0 and requests to v2.32.5Enhanced configuration file permission warning messages.
SF_SKIP_WARNING_FOR_READ_PERMISSIONS_ON_CONFIG_FILE environment variable.create_dataframe call on SnowparkFixed a bug where platform_detection was retrying failed requests with warnings to non-existent endpoints.
platform_detection_timeout_seconds to zero.Added infer_schema parameter to write_pandas to perform schema inference on the passed data.
infer_schema parameter to write_pandas to perform schema inference on the passed data.snowlake reverted back to non-module.Added in-band HTTP exception telemetry.
unsafe_skip_file_permissions_check flag to skip file permission checks on the cache and configuration.APPLICATION_PATH within CLIENT_ENVIRONMENT to distinguish between multiple scripts using the Python Connector in the same environment.WORKLOAD_IDENTITY value for the authenticator type.workload_identity_provider and workload_identity_entra_resource parameters.use_vectorized_scanner parameter in the write_pandas function.type_code in ResultMetadata for interval types.snowflake_version property to the connection.OAUTH_TYPE to CLIENT_ENVIROMENT.pyarrow version constrain; versions >= 19 can now be used.external_session_id was not provided in SnowflakeRestful.fetch.Oauth and programmatic_access_token authenticator values.authenticator values.pandas.DataFrame or pyarrow.Table would overflow due to unnecessary precision. A clear error will now be raised if an overflow cannot be prevented.Bumped numpy dependency from <2.1.0 to <=2.2.4.
bulk_upload_chunks parameter to write_pandas function. Setting this parameter to True changes the behaviour of write_pandas function to first write all the data chunks to the local disk and then perform the wildcard upload of the chunks folder to the stage. In default behaviour the chunks are being saved, uploaded and deleted one by one.client_fetch_use_mp parameter that enables multiprocessed fetching of result batches.write_pandas special characters usage in the location name.use_virtual_url when building the location for gcs storage client.Bumped up min boto and botocore version to 1.24.
oauth_client_id, oauth_client_secret, oauth_authorization_url, oauth_token_request_url, oauth_redirect_uri, oauth_scope, oauth_disable_pkce, oauth_enable_refresh_tokens and oauth_enable_single_use_refresh_tokens parameters.OAUTH_AUTHORIZATION_CODE value for the parameter authenticator.oauth_client_id, oauth_client_secret, oauth_token_request_url, and oauth_scope parameters.OAUTH_CLIENT_CREDENTIALS value for the parameter authenticator.client_store_temporary_credential property is to be set to true.Deprecated insecure_mode connection property and replaced it with disable_ocsp_checks with the same behavior as the former property.
client_fetch_threads experimental parameter to better utilize threads for fetching query results.check_arrow_conversion_error_on_every_column connection property that can be set to False to restore previous behaviour in which driver will ignore errors until it occurs in the last column. This flag's purpose is to unblock workflows that may be impacted by the bugfix and will be removed in later releases.requestId), rather than automatically generate a UUID4 to use for the HTTP Request ID.TO_DATE arrow to python conversion when invalid date was followed by the correct one.insecure_mode connection property and replaced it with disable_ocsp_checks with the same behavior as the former property.Bumped pyOpenSSL dependency upper boundary from <25.0.0 to <26.0.0.
write_pandas.unsafe_file_write connection parameter that restores the previous behaviour of saving files downloaded with GET with 644 permissions.Changed not to use scoped temporary objects.
Remedied SQL injection vulnerability in snowflake.connector.pandas_tools.write_pandas. See more https://github.com/snowflakedb/snowflake-connector-pyt…
Added a feature to limit the sizes of IO-bound ThreadPoolExecutors during PUT and GET commands.
cosign.private_key authentication type.Fixed a bug where multipart uploads to Azure would be missing their MD5 hashes.
Improved the error message for SSL-related issues to provide clearer guidance when an SSL error occurs.
Improved error handling for asynchronous queries, providing more detailed and informative error messages when an async query fails.
snowflake.connector.util_text.random_string to reduce the likelihood of collisions.Fixed a bug that logged the session token when renewing a session.
login_timeout as a string raised a TypeError during the login retry step.pathlib instead of os for default config file location resolution.cryptogaphy version pin.snowflake-export-certs (its backing module was already removed long ago)Set default connection timeout of 10 seconds and socket read timeout of 10 minutes for HTTP calls in file transfer.
to_pandas() performance by fully parallel downloading logic.private_key.Added support for token_file_path connection parameter to read an OAuth token from a file when connecting to Snowflake.
v3.11.0(June 17,2024)
token_file_path connection parameter to read an OAuth token from a file when connecting to Snowflake.debug_arrow_chunk connection parameter to allow debugging raw arrow data in case of arrow data parsing failure.disable_saml_url_check connection parameter to disable SAML URL check in OKTA authentication.: in a query parameter, for instance, https://sso.abc.com/idp/startSSO.ping?PartnerSpId=https://xyz.snowflakecomputing.com/.Removed an incorrect error log message that could occur during arrow data conversion.
v3.10.1(May 21, 2024)
Added support for structured types to fetch_pandas_all.
v3.10.0(April 29,2024)
Fixed an issue that caused a HTTP 400 error when connecting to a China endpoint.
v3.9.1(April 22,2024)
Added easy logging configuration so that users can easily generate log file by setup log config in $SNOWFLAKE_HOME/config.toml.
v3.9.0(April 20,2024)
$SNOWFLAKE_HOME/config.toml.…mode." introduced in v3.8.0 (yanked) as it's a breaking change. write_pandas will be fixed in the future in a non-breaking way.
v3.8.1(April 09, 2024)
write_pandas to skip TABLE IF NOT EXISTS in truncate mode." introduced in v3.8.0 (yanked) as it's a breaking change. write_pandas will be fixed in the future in a non-breaking way.v3.8.0(April 04,2024)
externalbrowser auth in containerized environments
/favicon on success pageSNOWFLAKE_AUTH_SOCKET_REUSE_PORT flag (usage: SNOWFLAKE_AUTH_SOCKET_REUSE_PORT=true) to set the underlying socket's SO_REUSEPORT flag (described in the socket man page)
SF_AUTH_SOCKET_PORT=3037 SNOWFLAKE_AUTH_SOCKET_REUSE_PORT=true poetry run python somescript.pySNOWFLAKE_AUTH_SOCKET_MSG_DONTWAIT flag (usage: SNOWFLAKE_AUTH_SOCKET_MSG_DONTWAIT=true) to make a non-blocking socket.recv call and retry on Error
write_pandas to skip TABLE IF NOT EXISTS in truncate mode.__del__ method.SnowflakeCursor.execute.Nothing published for this version
Bumped keyring dependency lower bound to 23.1.0 to address security vulnerability.
v3.7.1(February 21, 2024)
write_pandas wasn't truncating the target table.Added a new boolean parameter force_return_table to SnowflakeCursor.fetch_arrow_all to force returning pyarrow.Table in case of zero rows.
v3.7.0(January 25,2024)
force_return_table to SnowflakeCursor.fetch_arrow_all to force returning pyarrow.Table in case of zero rows.Changed urllib3 version pin to only affect Python versions < 3.10.
v3.6.0(December 09,2023)
private_key_file and private_key_file_pwd connection parametersexpired to SnowflakeConnection class, that keeps track of whether the connection's master token has expired.Deprecated the usage of the following class/variable/environment variable for the sake of pure nanoarrow converter:
v3.5.0(November 13,2023)
snowflake.connector.cursor.NanoarrowUsage.NANOARROW_USAGE.snowflake.connector.cursor.NANOARROW_USAGE.Bumped vendored urllib3 to 1.26.18
v3.4.1(November 08, 2023)
Added support for use_logical_type in write_pandas.
v3.4.0(November 03,2023)
use_logical_type in write_pandas.backoff_policy argument to snowflake.connector.connect allowing for configurable backoff policy between retries of failed requests. See available implementations in the backoff_policies module.socket_timeout argument to snowflake.connector.connect specifying socket read and connect timeout.login_timeout and network_timeout behaviour. Retries of login and network requests are now properly halted after these timeouts expire.urllib.Added for non-Windows platforms command suggestions (chown/chmod) for insufficient file permissions of config files.
v3.3.1(October 18, 2023)
ImportError when the c extensions are not compiled.Updated to Apache arrow-nanoarrow project for result arrow data conversion.
v3.3.0(October 10,2023)
NANOARROW_USAGE environment variable to allows switching between the nanoarrow converter and the arrow converter. Valid values include:
FOLLOW_SESSION_PARAMETER, which uses the converter configured in the server.DISABLE_NANOARROW, which uses arrow converter, overriding the server setting.ENABLE_NANOARROW, which uses the nanoarrow converter, overriding the server setting.snowflake.connector.cursor.NanoarrowUsage enum, whose members include:
NanoarrowUsage.FOLLOW_SESSION_PARAMETER, which uses the converter configured in the server.NanoarrowUsage.DISABLE_NANOARROW, which uses arrow converter, overriding the server setting.NanoarrowUsage.ENABLE_NANOARROW, which uses the nanoarrow converter, overriding the server setting.snowflake.connector.cursor.NANOARROW_USAGE module variable to allow switching between the nanoarrow converter and the arrow converter. It works in conjunction with the snowflake.connector.cursor.NanoarrowUsage enum.Version 3.3.0b1 is the snowflake-connector-python based on apache nanoarrow project, which reduces the package size as well as removes a hard dependen
Your coding agent can read these notes before it upgrades. Set up the MCP server →