snowflake-sqlalchemy 1.7.3__tar.gz → 1.7.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/DESCRIPTION.md +6 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/PKG-INFO +24 -2
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/README.md +23 -1
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/snowdialect.py +8 -26
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/version.py +1 -1
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/conftest.py +6 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/custom_tables/__snapshots__/test_reflect_snowflake_table.ambr +3 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/custom_tables/test_create_iceberg_table.py +6 -3
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/custom_tables/test_reflect_snowflake_table.py +30 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/.gitignore +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/.gitmodules +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/.pre-commit-config.yaml +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/LICENSE.txt +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/MANIFEST.in +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/ci/build.sh +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/ci/build_docker.sh +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/ci/docker/sqlalchemy_build/Dockerfile +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/ci/docker/sqlalchemy_build/scripts/entrypoint.sh +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/ci/set_base_image.sh +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/ci/test.sh +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/ci/test_docker.sh +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/ci/test_linux.sh +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/license_header.txt +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/pyproject.toml +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/setup.cfg +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/snyk/requirements.txt +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/snyk/requiremtnts.txt +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/snyk/update_requirements.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/__init__.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/_constants.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/base.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/compat.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/custom_commands.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/custom_types.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/exc.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/functions.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/parser/custom_type_parser.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/provision.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/requirements.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/sql/__init__.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/sql/custom_schema/__init__.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/sql/custom_schema/clustered_table.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/sql/custom_schema/custom_table_base.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/sql/custom_schema/custom_table_prefix.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/sql/custom_schema/dynamic_table.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/sql/custom_schema/hybrid_table.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/sql/custom_schema/iceberg_table.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/sql/custom_schema/options/__init__.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/sql/custom_schema/options/as_query_option.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/sql/custom_schema/options/cluster_by_option.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/sql/custom_schema/options/identifier_option.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/sql/custom_schema/options/invalid_table_option.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/sql/custom_schema/options/keyword_option.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/sql/custom_schema/options/keywords.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/sql/custom_schema/options/literal_option.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/sql/custom_schema/options/table_option.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/sql/custom_schema/options/target_lag_option.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/sql/custom_schema/snowflake_table.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/sql/custom_schema/table_from_query.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/util.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tested_requirements/requirements_310.reqs +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tested_requirements/requirements_37.reqs +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tested_requirements/requirements_38.reqs +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tested_requirements/requirements_39.reqs +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/README.rst +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/__init__.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/__snapshots__/test_compile_dynamic_table.ambr +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/__snapshots__/test_core.ambr +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/__snapshots__/test_orm.ambr +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/__snapshots__/test_reflect_dynamic_table.ambr +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/__snapshots__/test_structured_datatypes.ambr +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/__snapshots__/test_unit_structured_types.ambr +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/custom_tables/__init__.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/custom_tables/__snapshots__/test_compile_dynamic_table.ambr +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/custom_tables/__snapshots__/test_compile_hybrid_table.ambr +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/custom_tables/__snapshots__/test_compile_iceberg_table.ambr +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/custom_tables/__snapshots__/test_compile_snowflake_table.ambr +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/custom_tables/__snapshots__/test_create_dynamic_table.ambr +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/custom_tables/__snapshots__/test_create_hybrid_table.ambr +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/custom_tables/__snapshots__/test_create_iceberg_table.ambr +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/custom_tables/__snapshots__/test_create_snowflake_table.ambr +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/custom_tables/__snapshots__/test_generic_options.ambr +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/custom_tables/__snapshots__/test_reflect_hybrid_table.ambr +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/custom_tables/test_compile_dynamic_table.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/custom_tables/test_compile_hybrid_table.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/custom_tables/test_compile_iceberg_table.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/custom_tables/test_compile_snowflake_table.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/custom_tables/test_create_dynamic_table.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/custom_tables/test_create_hybrid_table.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/custom_tables/test_create_snowflake_table.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/custom_tables/test_generic_options.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/custom_tables/test_reflect_dynamic_table.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/custom_tables/test_reflect_hybrid_table.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/data/users.txt +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/sqlalchemy_test_suite/README.md +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/sqlalchemy_test_suite/__init__.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/sqlalchemy_test_suite/conftest.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/sqlalchemy_test_suite/test_suite.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/sqlalchemy_test_suite/test_suite_20.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/test_compiler.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/test_copy.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/test_core.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/test_create.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/test_custom_functions.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/test_custom_types.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/test_geography.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/test_geometry.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/test_imports.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/test_index_reflection.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/test_multivalues_insert.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/test_orm.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/test_pandas.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/test_qmark.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/test_quote.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/test_quote_identifiers.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/test_semi_structured_datatypes.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/test_sequence.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/test_structured_datatypes.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/test_timestamp.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/test_transactions.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/test_unit_core.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/test_unit_cte.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/test_unit_structured_types.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/test_unit_types.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/test_unit_url.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/util.py +0 -0
- {snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tox.ini +0 -0
|
@@ -6,8 +6,14 @@ Snowflake Documentation is available at:
|
|
|
6
6
|
|
|
7
7
|
Source code is also available at:
|
|
8
8
|
<https://github.com/snowflakedb/snowflake-sqlalchemy>
|
|
9
|
+
# Unreleased Notes
|
|
9
10
|
|
|
10
11
|
# Release Notes
|
|
12
|
+
- v1.7.4(June 10, 2025)
|
|
13
|
+
- Fix dependency on DESCRIBE TABLE columns quantity (differences in columns caused by Snowflake parameters).
|
|
14
|
+
- Fix unnecessary condition was causing issues when parsing StructuredTypes columns.
|
|
15
|
+
- Update README.md to include instructions on how to verify package signatures using cosign.
|
|
16
|
+
|
|
11
17
|
- v1.7.3(January 15, 2025)
|
|
12
18
|
- Fix support for SqlAlchemy ARRAY.
|
|
13
19
|
- Fix return value of snowflake get_table_names.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: snowflake-sqlalchemy
|
|
3
|
-
Version: 1.7.
|
|
3
|
+
Version: 1.7.4
|
|
4
4
|
Summary: Snowflake SQLAlchemy Dialect
|
|
5
5
|
Project-URL: Changelog, https://github.com/snowflakedb/snowflake-sqlalchemy/blob/main/DESCRIPTION.md
|
|
6
6
|
Project-URL: Documentation, https://docs.snowflake.com/en/user-guide/sqlalchemy.html
|
|
@@ -63,7 +63,7 @@ Description-Content-Type: text/markdown
|
|
|
63
63
|
Snowflake SQLAlchemy runs on the top of the Snowflake Connector for Python as a [dialect](http://docs.sqlalchemy.org/en/latest/dialects/) to bridge a Snowflake database and SQLAlchemy applications.
|
|
64
64
|
|
|
65
65
|
|
|
66
|
-
| :exclamation:
|
|
66
|
+
| :exclamation: | Effective May 8th, 2025, Snowflake SQLAlchemy will transition to maintenance mode and will cease active development. Support will be limited to addressing critical bugs and security vulnerabilities. To report such issues, please [create a case with Snowflake Support](https://community.snowflake.com/s/article/How-To-Submit-a-Support-Case-in-Snowflake-Lodge). for individual evaluation. Please note that pull requests from external contributors may not receive action from Snowflake. |
|
|
67
67
|
|---------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
68
68
|
|
|
69
69
|
|
|
@@ -731,6 +731,28 @@ dynamic_test_table_1 = DynamicTable(
|
|
|
731
731
|
- Direct data insertion into Dynamic Tables is not supported.
|
|
732
732
|
|
|
733
733
|
|
|
734
|
+
## Verifying Package Signatures
|
|
735
|
+
|
|
736
|
+
To ensure the authenticity and integrity of the Python package, follow the steps below to verify the package signature using `cosign`.
|
|
737
|
+
|
|
738
|
+
**Steps to verify the signature:**
|
|
739
|
+
- Install cosign:
|
|
740
|
+
- This example is using golang installation: [installing-cosign-with-go](https://edu.chainguard.dev/open-source/sigstore/cosign/how-to-install-cosign/#installing-cosign-with-go)
|
|
741
|
+
- Download the file from the repository like pypi:
|
|
742
|
+
- https://pypi.org/project/snowflake-sqlalchemy/#files
|
|
743
|
+
- Download the signature files from the release tag, replace the version number with the version you are verifying:
|
|
744
|
+
- https://github.com/snowflakedb/snowflake-sqlalchemy/releases/tag/v1.7.3
|
|
745
|
+
- Verify signature:
|
|
746
|
+
````bash
|
|
747
|
+
# replace the version number with the version you are verifying
|
|
748
|
+
./cosign verify-blob snowflake_sqlalchemy-1.7.3-py3-none-any.whl \
|
|
749
|
+
--certificate snowflake_sqlalchemy-1.7.3-py3-none-any.whl.crt \
|
|
750
|
+
--certificate-identity https://github.com/snowflakedb/snowflake-sqlalchemy/.github/workflows/python-publish.yml@refs/tags/v1.7.3 \
|
|
751
|
+
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
|
|
752
|
+
--signature snowflake_sqlalchemy-1.7.3-py3-none-any.whl.sig
|
|
753
|
+
Verified OK
|
|
754
|
+
````
|
|
755
|
+
|
|
734
756
|
## Support
|
|
735
757
|
|
|
736
758
|
Feel free to file an issue or submit a PR here for general cases. For official support, contact Snowflake support at:
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
Snowflake SQLAlchemy runs on the top of the Snowflake Connector for Python as a [dialect](http://docs.sqlalchemy.org/en/latest/dialects/) to bridge a Snowflake database and SQLAlchemy applications.
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
| :exclamation:
|
|
12
|
+
| :exclamation: | Effective May 8th, 2025, Snowflake SQLAlchemy will transition to maintenance mode and will cease active development. Support will be limited to addressing critical bugs and security vulnerabilities. To report such issues, please [create a case with Snowflake Support](https://community.snowflake.com/s/article/How-To-Submit-a-Support-Case-in-Snowflake-Lodge). for individual evaluation. Please note that pull requests from external contributors may not receive action from Snowflake. |
|
|
13
13
|
|---------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
14
14
|
|
|
15
15
|
|
|
@@ -677,6 +677,28 @@ dynamic_test_table_1 = DynamicTable(
|
|
|
677
677
|
- Direct data insertion into Dynamic Tables is not supported.
|
|
678
678
|
|
|
679
679
|
|
|
680
|
+
## Verifying Package Signatures
|
|
681
|
+
|
|
682
|
+
To ensure the authenticity and integrity of the Python package, follow the steps below to verify the package signature using `cosign`.
|
|
683
|
+
|
|
684
|
+
**Steps to verify the signature:**
|
|
685
|
+
- Install cosign:
|
|
686
|
+
- This example is using golang installation: [installing-cosign-with-go](https://edu.chainguard.dev/open-source/sigstore/cosign/how-to-install-cosign/#installing-cosign-with-go)
|
|
687
|
+
- Download the file from the repository like pypi:
|
|
688
|
+
- https://pypi.org/project/snowflake-sqlalchemy/#files
|
|
689
|
+
- Download the signature files from the release tag, replace the version number with the version you are verifying:
|
|
690
|
+
- https://github.com/snowflakedb/snowflake-sqlalchemy/releases/tag/v1.7.3
|
|
691
|
+
- Verify signature:
|
|
692
|
+
````bash
|
|
693
|
+
# replace the version number with the version you are verifying
|
|
694
|
+
./cosign verify-blob snowflake_sqlalchemy-1.7.3-py3-none-any.whl \
|
|
695
|
+
--certificate snowflake_sqlalchemy-1.7.3-py3-none-any.whl.crt \
|
|
696
|
+
--certificate-identity https://github.com/snowflakedb/snowflake-sqlalchemy/.github/workflows/python-publish.yml@refs/tags/v1.7.3 \
|
|
697
|
+
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
|
|
698
|
+
--signature snowflake_sqlalchemy-1.7.3-py3-none-any.whl.sig
|
|
699
|
+
Verified OK
|
|
700
|
+
````
|
|
701
|
+
|
|
680
702
|
## Support
|
|
681
703
|
|
|
682
704
|
Feel free to file an issue or submit a PR here for general cases. For official support, contact Snowflake support at:
|
{snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/snowdialect.py
RENAMED
|
@@ -511,13 +511,6 @@ class SnowflakeDialect(default.DefaultDialect):
|
|
|
511
511
|
)
|
|
512
512
|
schema_name = self.denormalize_name(schema)
|
|
513
513
|
|
|
514
|
-
iceberg_table_names = self.get_table_names_with_prefix(
|
|
515
|
-
connection,
|
|
516
|
-
schema=schema_name,
|
|
517
|
-
prefix=CustomTablePrefix.ICEBERG.name,
|
|
518
|
-
info_cache=kw.get("info_cache", None),
|
|
519
|
-
)
|
|
520
|
-
|
|
521
514
|
result = connection.execute(
|
|
522
515
|
text(
|
|
523
516
|
"""
|
|
@@ -578,10 +571,7 @@ class SnowflakeDialect(default.DefaultDialect):
|
|
|
578
571
|
col_type_kw["scale"] = numeric_scale
|
|
579
572
|
elif issubclass(col_type, (sqltypes.String, sqltypes.BINARY)):
|
|
580
573
|
col_type_kw["length"] = character_maximum_length
|
|
581
|
-
elif (
|
|
582
|
-
issubclass(col_type, StructuredType)
|
|
583
|
-
and table_name in iceberg_table_names
|
|
584
|
-
):
|
|
574
|
+
elif issubclass(col_type, StructuredType):
|
|
585
575
|
if (schema_name, table_name) not in full_columns_descriptions:
|
|
586
576
|
full_columns_descriptions[(schema_name, table_name)] = (
|
|
587
577
|
self.table_columns_as_dict(
|
|
@@ -654,21 +644,13 @@ class SnowflakeDialect(default.DefaultDialect):
|
|
|
654
644
|
f" TABLE {table_schema}.{table_name} TYPE = COLUMNS"
|
|
655
645
|
)
|
|
656
646
|
)
|
|
657
|
-
for
|
|
658
|
-
column_name
|
|
659
|
-
coltype
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
_unique_key,
|
|
665
|
-
_check,
|
|
666
|
-
_expression,
|
|
667
|
-
comment,
|
|
668
|
-
_policy_name,
|
|
669
|
-
_privacy_domain,
|
|
670
|
-
_name_mapping,
|
|
671
|
-
) in result:
|
|
647
|
+
for desc_data in result:
|
|
648
|
+
column_name = desc_data[0]
|
|
649
|
+
coltype = desc_data[1]
|
|
650
|
+
is_nullable = desc_data[3]
|
|
651
|
+
column_default = desc_data[4]
|
|
652
|
+
primary_key = desc_data[5]
|
|
653
|
+
comment = desc_data[9]
|
|
672
654
|
|
|
673
655
|
column_name = self.normalize_name(column_name)
|
|
674
656
|
if column_name.startswith("sys_clustering_column"):
|
|
@@ -203,6 +203,12 @@ def get_engine(url: URL, **engine_kwargs):
|
|
|
203
203
|
"echo": True,
|
|
204
204
|
}
|
|
205
205
|
engine_params.update(engine_kwargs)
|
|
206
|
+
|
|
207
|
+
connect_args = engine_params.get("connect_args", {}).copy()
|
|
208
|
+
connect_args["disable_ocsp_checks"] = True
|
|
209
|
+
connect_args["insecure_mode"] = True
|
|
210
|
+
engine_params["connect_args"] = connect_args
|
|
211
|
+
|
|
206
212
|
engine = create_engine(url, **engine_params)
|
|
207
213
|
return engine
|
|
208
214
|
|
|
@@ -21,6 +21,9 @@
|
|
|
21
21
|
}),
|
|
22
22
|
])
|
|
23
23
|
# ---
|
|
24
|
+
# name: test_reflection_of_table_with_object_data_type
|
|
25
|
+
'CREATE TABLE test_snowflake_table_reflection (\tid DECIMAL(38, 0) NOT NULL, \tname OBJECT, \tCONSTRAINT demo_name PRIMARY KEY (id))'
|
|
26
|
+
# ---
|
|
24
27
|
# name: test_simple_reflection_of_table_as_snowflake_table
|
|
25
28
|
'CREATE TABLE test_snowflake_table_reflection (\tid DECIMAL(38, 0) NOT NULL, \tname VARCHAR(16777216), \tCONSTRAINT demo_name PRIMARY KEY (id))'
|
|
26
29
|
# ---
|
|
@@ -9,7 +9,7 @@ from snowflake.sqlalchemy import IcebergTable
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
@pytest.mark.aws
|
|
12
|
-
def test_create_iceberg_table(engine_testaccount
|
|
12
|
+
def test_create_iceberg_table(engine_testaccount):
|
|
13
13
|
metadata = MetaData()
|
|
14
14
|
external_volume_name = "exvol"
|
|
15
15
|
create_external_volume = f"""
|
|
@@ -19,7 +19,7 @@ def test_create_iceberg_table(engine_testaccount, snapshot):
|
|
|
19
19
|
(
|
|
20
20
|
NAME = 'my-s3-us-west-2'
|
|
21
21
|
STORAGE_PROVIDER = 'S3'
|
|
22
|
-
STORAGE_BASE_URL = 's3://
|
|
22
|
+
STORAGE_BASE_URL = 's3://myexamplebucket/'
|
|
23
23
|
STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::123456789012:role/myrole'
|
|
24
24
|
ENCRYPTION=(TYPE='AWS_SSE_KMS' KMS_KEY_ID='1234abcd-12ab-34cd-56ef-1234567890ab')
|
|
25
25
|
)
|
|
@@ -40,4 +40,7 @@ def test_create_iceberg_table(engine_testaccount, snapshot):
|
|
|
40
40
|
metadata.create_all(engine_testaccount)
|
|
41
41
|
|
|
42
42
|
error_str = str(argument_error.value)
|
|
43
|
-
assert
|
|
43
|
+
assert (
|
|
44
|
+
"(snowflake.connector.errors.ProgrammingError)"
|
|
45
|
+
in error_str[: error_str.rfind("\n")]
|
|
46
|
+
)
|
|
@@ -7,6 +7,36 @@ from sqlalchemy.sql.ddl import CreateTable
|
|
|
7
7
|
from snowflake.sqlalchemy import SnowflakeTable
|
|
8
8
|
|
|
9
9
|
|
|
10
|
+
def test_reflection_of_table_with_object_data_type(
|
|
11
|
+
engine_testaccount, db_parameters, sql_compiler, snapshot
|
|
12
|
+
):
|
|
13
|
+
metadata = MetaData()
|
|
14
|
+
table_name = "test_snowflake_table_reflection"
|
|
15
|
+
|
|
16
|
+
create_table_sql = f"""
|
|
17
|
+
CREATE TABLE {table_name} (id INT primary key, name OBJECT);
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
with engine_testaccount.connect() as connection:
|
|
21
|
+
connection.exec_driver_sql(create_table_sql)
|
|
22
|
+
|
|
23
|
+
snowflake_test_table = Table(table_name, metadata, autoload_with=engine_testaccount)
|
|
24
|
+
constraint = snowflake_test_table.constraints.pop()
|
|
25
|
+
constraint.name = "demo_name"
|
|
26
|
+
snowflake_test_table.constraints.add(constraint)
|
|
27
|
+
|
|
28
|
+
try:
|
|
29
|
+
with engine_testaccount.connect():
|
|
30
|
+
value = CreateTable(snowflake_test_table)
|
|
31
|
+
|
|
32
|
+
actual = sql_compiler(value)
|
|
33
|
+
|
|
34
|
+
assert actual == snapshot
|
|
35
|
+
|
|
36
|
+
finally:
|
|
37
|
+
metadata.drop_all(engine_testaccount)
|
|
38
|
+
|
|
39
|
+
|
|
10
40
|
def test_simple_reflection_of_table_as_sqlalchemy_table(
|
|
11
41
|
engine_testaccount, db_parameters, sql_compiler, snapshot
|
|
12
42
|
):
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/ci/docker/sqlalchemy_build/Dockerfile
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/__init__.py
RENAMED
|
File without changes
|
{snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/_constants.py
RENAMED
|
File without changes
|
|
File without changes
|
{snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/compat.py
RENAMED
|
File without changes
|
|
File without changes
|
{snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/custom_types.py
RENAMED
|
File without changes
|
|
File without changes
|
{snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/functions.py
RENAMED
|
File without changes
|
|
File without changes
|
{snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/provision.py
RENAMED
|
File without changes
|
{snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/requirements.py
RENAMED
|
File without changes
|
{snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/src/snowflake/sqlalchemy/sql/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tested_requirements/requirements_310.reqs
RENAMED
|
File without changes
|
{snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tested_requirements/requirements_37.reqs
RENAMED
|
File without changes
|
{snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tested_requirements/requirements_38.reqs
RENAMED
|
File without changes
|
{snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tested_requirements/requirements_39.reqs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/__snapshots__/test_core.ambr
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/sqlalchemy_test_suite/README.md
RENAMED
|
File without changes
|
{snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/sqlalchemy_test_suite/__init__.py
RENAMED
|
File without changes
|
{snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/sqlalchemy_test_suite/conftest.py
RENAMED
|
File without changes
|
{snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/sqlalchemy_test_suite/test_suite.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/test_semi_structured_datatypes.py
RENAMED
|
File without changes
|
|
File without changes
|
{snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/test_structured_datatypes.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{snowflake_sqlalchemy-1.7.3 → snowflake_sqlalchemy-1.7.4}/tests/test_unit_structured_types.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|