sqlmodel 0.0.45__tar.gz → 0.0.47__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.
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/PKG-INFO +1 -1
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial003_py310.py +3 -2
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial004_py310.py +3 -2
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial005_py310.py +3 -2
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/pyproject.toml +3 -1
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/__init__.py +1 -1
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/sql/sqltypes.py +10 -2
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/conftest.py +24 -1
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_advanced/test_datetime/test_tutorial001.py +13 -7
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_advanced/test_decimal/test_tutorial001.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_advanced/test_uuid/test_tutorial001.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_advanced/test_uuid/test_tutorial002.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_annotated_uuid.py +4 -3
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_datetime.py +40 -12
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_field_sa_args_kwargs.py +13 -14
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_future_annotations.py +6 -5
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_instance_no_args.py +4 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_main.py +20 -15
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_nullable.py +39 -34
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_query.py +4 -3
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_select_typing.py +4 -6
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_automatic_id_none_refresh/test_tutorial001_tutorial002.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_code_structure/test_tutorial001.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_code_structure/test_tutorial002.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_create_connected_tables/test_tutorial001.py +3 -5
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_delete/test_tutorial001.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_insert/test_tutorial001.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_select/test_tutorial001_tutorial002.py +8 -6
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_select/test_tutorial003.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_select/test_tutorial004.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_select/test_tutorial005.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_update/test_tutorial001.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_create_db_and_table/test_tutorial002.py +3 -5
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_create_db_and_table/test_tutorial003.py +3 -5
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_delete/test_tutorial001_tutorial002.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_delete/test_tutorial001.py +3 -7
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_limit_and_offset/test_tutorial001.py +3 -7
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_multiple_models/test_tutorial001.py +9 -27
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_multiple_models/test_tutorial002.py +9 -27
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_read_one/test_tutorial001.py +3 -7
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_relationships/test_tutorial001.py +3 -7
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_response_model/test_tutorial001.py +3 -7
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_session_with_dependency/test_tutorial001.py +3 -7
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_simple_hero_api/test_tutorial001.py +3 -7
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_teams/test_tutorial001.py +3 -7
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_update/test_tutorial001.py +3 -7
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_update/test_tutorial002.py +4 -7
- sqlmodel-0.0.47/tests/test_tutorial/test_indexes/test_tutorial001.py +36 -0
- sqlmodel-0.0.47/tests/test_tutorial/test_indexes/test_tutorial002.py +37 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_insert/test_tutorial001.py +4 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_insert/test_tutorial002.py +4 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_insert/test_tutorial003.py +4 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_limit_and_offset/test_tutorial001.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_limit_and_offset/test_tutorial002.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_limit_and_offset/test_tutorial003.py +3 -4
- sqlmodel-0.0.47/tests/test_tutorial/test_limit_and_offset/test_tutorial004.py +42 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_many_to_many/test_tutorial001.py +7 -6
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_many_to_many/test_tutorial002.py +13 -10
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_many_to_many/test_tutorial003.py +14 -9
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_one/test_tutorial001.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_one/test_tutorial002.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_one/test_tutorial003.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_one/test_tutorial004.py +10 -6
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_one/test_tutorial005.py +10 -6
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_one/test_tutorial006.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_one/test_tutorial007.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_one/test_tutorial008.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_one/test_tutorial009.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_back_populates/test_tutorial001.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_back_populates/test_tutorial002.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_back_populates/test_tutorial003.py +3 -5
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_create_and_update_relationships/test_tutorial001.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_define_relationship_attributes/test_tutorial001.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial001.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial002.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial003.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial004.py +5 -5
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial005.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_read_relationships/test_tutorial001.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_read_relationships/test_tutorial002.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_select/test_tutorial001_tutorial002.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_select/test_tutorial003_tutorial004.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_update/test_tutorial001_tutorial002.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_update/test_tutorial003_tutorial004.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial001.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial002.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial003.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial004.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial005.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial006.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial006b.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial007.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial008.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial009.py +3 -4
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial011.py +3 -4
- sqlmodel-0.0.45/tests/test_tutorial/test_indexes/test_tutorial001.py +0 -51
- sqlmodel-0.0.45/tests/test_tutorial/test_indexes/test_tutorial002.py +0 -52
- sqlmodel-0.0.45/tests/test_tutorial/test_limit_and_offset/test_tutorial004.py +0 -32
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/LICENSE +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/README.md +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/advanced/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/advanced/datetime/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/advanced/datetime/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/advanced/datetime/tutorial001_py311.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/advanced/datetime/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/advanced/datetime/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/advanced/datetime/tutorial004_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/advanced/datetime/tutorial005_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/advanced/decimal/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/advanced/decimal/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/advanced/uuid/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/advanced/uuid/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/advanced/uuid/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/automatic_id_none_refresh/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/automatic_id_none_refresh/annotations/en/tutorial002.md +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/automatic_id_none_refresh/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/automatic_id_none_refresh/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/code_structure/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/code_structure/tutorial001_py310/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/code_structure/tutorial001_py310/app.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/code_structure/tutorial001_py310/database.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/code_structure/tutorial001_py310/models.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/code_structure/tutorial002_py310/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/code_structure/tutorial002_py310/app.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/code_structure/tutorial002_py310/database.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/code_structure/tutorial002_py310/hero_model.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/code_structure/tutorial002_py310/team_model.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/connect/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/connect/create_tables/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/connect/create_tables/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/connect/delete/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/connect/delete/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/connect/insert/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/connect/insert/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/connect/select/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/connect/select/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/connect/select/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/connect/select/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/connect/select/tutorial004_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/connect/select/tutorial005_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/connect/update/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/connect/update/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/create_db_and_table/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/create_db_and_table/annotations/en/tutorial003.md +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/create_db_and_table/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/create_db_and_table/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/create_db_and_table/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/delete/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/delete/annotations/en/tutorial002.md +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/delete/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/delete/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/annotations/en/test_main_001.md +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/annotations/en/test_main_002.md +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/annotations/en/test_main_003.md +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/annotations/en/test_main_004.md +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/annotations/en/test_main_005.md +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/annotations/en/test_main_006.md +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/main.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_extra_coverage.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main_001.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main_002.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main_003.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main_004.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main_005.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main_006.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/delete/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/delete/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/limit_and_offset/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/limit_and_offset/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/multiple_models/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/multiple_models/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/multiple_models/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/read_one/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/read_one/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/relationships/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/relationships/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/response_model/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/response_model/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/session_with_dependency/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/session_with_dependency/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/simple_hero_api/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/simple_hero_api/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/teams/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/teams/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/update/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/update/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/update/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/indexes/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/indexes/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/indexes/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/insert/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/insert/annotations/en/tutorial003.md +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/insert/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/insert/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/insert/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/many_to_many/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/many_to_many/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/many_to_many/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/many_to_many/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/offset_and_limit/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/offset_and_limit/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/offset_and_limit/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/offset_and_limit/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/offset_and_limit/tutorial004_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/one/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/one/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/one/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/one/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/one/tutorial004_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/one/tutorial005_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/one/tutorial006_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/one/tutorial007_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/one/tutorial008_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/one/tutorial009_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/back_populates/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/back_populates/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/back_populates/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/back_populates/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/create_and_update_relationships/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/create_and_update_relationships/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/define_relationship_attributes/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/define_relationship_attributes/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/read_relationships/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/read_relationships/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/read_relationships/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/select/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/select/annotations/en/tutorial002.md +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/select/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/select/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/select/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/select/tutorial004_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/update/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/update/annotations/en/tutorial002.md +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/update/annotations/en/tutorial004.md +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/update/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/update/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/update/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/update/tutorial004_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/where/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial004_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial005_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial006_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial006b_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial007_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial008_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial009_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial011_py310.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/scripts/add_latest_release_date.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/scripts/deploy_docs_status.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/scripts/docs.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/scripts/format.sh +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/scripts/generate_select.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/scripts/lint.sh +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/scripts/prepare_release.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/scripts/test.sh +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/.agents/skills/sqlmodel/SKILL.md +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/_compat.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/default.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/ext/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/ext/asyncio/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/ext/asyncio/session.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/main.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/orm/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/orm/session.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/pool/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/py.typed +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/sql/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/sql/_expression_select_cls.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/sql/_expression_select_gen.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/sql/_expression_select_gen.py.jinja2 +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/sql/base.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/sql/expression.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_advanced/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_advanced/test_datetime/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_advanced/test_datetime/test_tutorial002.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_advanced/test_datetime/test_tutorial003.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_advanced/test_datetime/test_tutorial004.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_advanced/test_datetime/test_tutorial005.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_advanced/test_decimal/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_advanced/test_uuid/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_aliases.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_dataclass_transform.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_default.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_deprecations.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_enums.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_enums_models.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_field_sa_column.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_field_sa_relationship.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_field_sa_type.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_fields_set.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_missing_type.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_ondelete_raises.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_prepare_release.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_pydantic/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_pydantic/test_field.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_pydantic/test_model_dump.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_select_gen.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_sqlalchemy_type_errors.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_automatic_id_none_refresh/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_code_structure/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_create_connected_tables/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_delete/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_insert/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_select/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_update/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_create_db_and_table/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_create_db_and_table/test_tutorial001.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_delete/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_app_testing/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests001.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests002.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests003.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests004.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests005.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests006.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests_main.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_delete/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_limit_and_offset/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_multiple_models/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_read_one/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_relationships/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_response_model/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_session_with_dependency/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_simple_hero_api/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_teams/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_update/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_indexes/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_insert/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_limit_and_offset/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_many_to_many/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_one/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_back_populates/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_create_and_update_relationships/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_define_relationship_attributes/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_read_relationships/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_select/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_update/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/__init__.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_update.py +0 -0
- {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_validation.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sqlmodel
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.47
|
|
4
4
|
Summary: SQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness.
|
|
5
5
|
Author-Email: =?utf-8?q?Sebasti=C3=A1n_Ram=C3=ADrez?= <tiangolo@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -29,8 +29,9 @@ engine = create_engine(sqlite_url, echo=True)
|
|
|
29
29
|
|
|
30
30
|
def create_db_and_tables():
|
|
31
31
|
SQLModel.metadata.create_all(engine)
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
if engine.dialect.name == "sqlite":
|
|
33
|
+
with engine.connect() as connection:
|
|
34
|
+
connection.execute(text("PRAGMA foreign_keys=ON"))
|
|
34
35
|
|
|
35
36
|
|
|
36
37
|
def create_heroes():
|
|
@@ -29,8 +29,9 @@ engine = create_engine(sqlite_url, echo=True)
|
|
|
29
29
|
|
|
30
30
|
def create_db_and_tables():
|
|
31
31
|
SQLModel.metadata.create_all(engine)
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
if engine.dialect.name == "sqlite":
|
|
33
|
+
with engine.connect() as connection:
|
|
34
|
+
connection.execute(text("PRAGMA foreign_keys=ON"))
|
|
34
35
|
|
|
35
36
|
|
|
36
37
|
def create_heroes():
|
|
@@ -29,8 +29,9 @@ engine = create_engine(sqlite_url, echo=True)
|
|
|
29
29
|
|
|
30
30
|
def create_db_and_tables():
|
|
31
31
|
SQLModel.metadata.create_all(engine)
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
if engine.dialect.name == "sqlite":
|
|
33
|
+
with engine.connect() as connection:
|
|
34
|
+
connection.execute(text("PRAGMA foreign_keys=ON"))
|
|
34
35
|
|
|
35
36
|
|
|
36
37
|
def create_heroes():
|
|
@@ -41,7 +41,7 @@ dependencies = [
|
|
|
41
41
|
"pydantic>=2.11.0",
|
|
42
42
|
"typing-extensions>=4.5.0",
|
|
43
43
|
]
|
|
44
|
-
version = "0.0.
|
|
44
|
+
version = "0.0.47"
|
|
45
45
|
|
|
46
46
|
[project.urls]
|
|
47
47
|
Homepage = "https://github.com/fastapi/sqlmodel"
|
|
@@ -85,6 +85,8 @@ tests = [
|
|
|
85
85
|
"fastapi >=0.128.0",
|
|
86
86
|
"httpx >=0.28.1",
|
|
87
87
|
"jinja2 >=3.1.6",
|
|
88
|
+
"psycopg[binary] >=3.2.10",
|
|
89
|
+
"pymysql[rsa] >=1.1.1",
|
|
88
90
|
"pytest >=7.0.1",
|
|
89
91
|
"ruff >=0.15.6",
|
|
90
92
|
"ty>=0.0.25",
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
from datetime import datetime, timezone
|
|
1
|
+
from datetime import datetime, timedelta, timezone
|
|
2
2
|
from typing import Any, cast
|
|
3
3
|
|
|
4
4
|
from sqlalchemy import types
|
|
5
5
|
from sqlalchemy.engine.interfaces import Dialect
|
|
6
|
+
from sqlalchemy.sql.operators import OperatorType
|
|
6
7
|
|
|
7
8
|
|
|
8
9
|
class UTCDateTime(types.TypeDecorator[datetime]):
|
|
@@ -17,6 +18,13 @@ class UTCDateTime(types.TypeDecorator[datetime]):
|
|
|
17
18
|
def __repr__(self) -> str:
|
|
18
19
|
return "UTCDateTime()"
|
|
19
20
|
|
|
21
|
+
def coerce_compared_value(
|
|
22
|
+
self, op: OperatorType | None, value: Any
|
|
23
|
+
) -> types.TypeEngine[Any]:
|
|
24
|
+
if isinstance(value, timedelta):
|
|
25
|
+
return types.Interval()
|
|
26
|
+
return self
|
|
27
|
+
|
|
20
28
|
def process_bind_param(
|
|
21
29
|
self, value: datetime | None, dialect: Dialect
|
|
22
30
|
) -> datetime | None:
|
|
@@ -48,6 +56,6 @@ class AutoString(types.TypeDecorator):
|
|
|
48
56
|
|
|
49
57
|
def load_dialect_impl(self, dialect: Dialect) -> "types.TypeEngine[Any]":
|
|
50
58
|
impl = cast(types.String, self.impl)
|
|
51
|
-
if impl.length is None and dialect.name
|
|
59
|
+
if impl.length is None and dialect.name in {"mysql", "mariadb"}:
|
|
52
60
|
return dialect.type_descriptor(types.String(self.mysql_default_length))
|
|
53
61
|
return super().load_dialect_impl(dialect)
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import os
|
|
1
2
|
import shutil
|
|
2
3
|
import subprocess
|
|
3
4
|
import sys
|
|
@@ -9,7 +10,10 @@ from unittest.mock import patch
|
|
|
9
10
|
|
|
10
11
|
import pytest
|
|
11
12
|
from pydantic import BaseModel
|
|
12
|
-
from
|
|
13
|
+
from sqlalchemy import Engine
|
|
14
|
+
from sqlalchemy.engine import make_url
|
|
15
|
+
from sqlalchemy.pool import StaticPool
|
|
16
|
+
from sqlmodel import SQLModel, create_engine
|
|
13
17
|
from sqlmodel.main import default_registry
|
|
14
18
|
|
|
15
19
|
top_level_path = Path(__file__).resolve().parent.parent
|
|
@@ -27,6 +31,25 @@ def clear_sqlmodel() -> Any:
|
|
|
27
31
|
default_registry.dispose()
|
|
28
32
|
|
|
29
33
|
|
|
34
|
+
@pytest.fixture()
|
|
35
|
+
def database_engine(clear_sqlmodel: Any) -> Generator[Engine, None, None]:
|
|
36
|
+
url = make_url(os.environ.get("DATABASE_URL", "sqlite://"))
|
|
37
|
+
if url.get_backend_name() == "sqlite":
|
|
38
|
+
engine = create_engine(
|
|
39
|
+
url, connect_args={"check_same_thread": False}, poolclass=StaticPool
|
|
40
|
+
)
|
|
41
|
+
else:
|
|
42
|
+
engine = create_engine(url)
|
|
43
|
+
try:
|
|
44
|
+
yield engine
|
|
45
|
+
finally:
|
|
46
|
+
# Drop tables before clear_sqlmodel removes their metadata.
|
|
47
|
+
try:
|
|
48
|
+
SQLModel.metadata.drop_all(engine)
|
|
49
|
+
finally:
|
|
50
|
+
engine.dispose()
|
|
51
|
+
|
|
52
|
+
|
|
30
53
|
@pytest.fixture()
|
|
31
54
|
def cov_tmp_path(tmp_path: Path) -> Generator[Path, None, None]:
|
|
32
55
|
yield tmp_path
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import importlib
|
|
2
|
-
from datetime import datetime, timezone
|
|
2
|
+
from datetime import datetime, timedelta, timezone
|
|
3
3
|
from types import ModuleType
|
|
4
4
|
|
|
5
5
|
import pytest
|
|
6
|
-
from
|
|
6
|
+
from sqlalchemy import Engine
|
|
7
|
+
from sqlmodel import SQLModel
|
|
7
8
|
|
|
8
9
|
from ...conftest import PrintMock, needs_py311
|
|
9
10
|
|
|
@@ -15,10 +16,9 @@ from ...conftest import PrintMock, needs_py311
|
|
|
15
16
|
pytest.param("tutorial001_py311", marks=needs_py311),
|
|
16
17
|
],
|
|
17
18
|
)
|
|
18
|
-
def get_module(request: pytest.FixtureRequest) -> ModuleType:
|
|
19
|
+
def get_module(request: pytest.FixtureRequest, database_engine: Engine) -> ModuleType:
|
|
19
20
|
mod = importlib.import_module(f"docs_src.advanced.datetime.{request.param}")
|
|
20
|
-
mod.
|
|
21
|
-
mod.engine = create_engine(mod.sqlite_url)
|
|
21
|
+
mod.engine = database_engine
|
|
22
22
|
return mod
|
|
23
23
|
|
|
24
24
|
|
|
@@ -30,11 +30,17 @@ def test_tutorial(print_mock: PrintMock, mod: ModuleType) -> None:
|
|
|
30
30
|
created_at = print_mock.calls[0][1]["created_at"]
|
|
31
31
|
assert created_at.tzinfo is timezone.utc
|
|
32
32
|
assert before <= created_at <= after
|
|
33
|
+
stored_created_at = print_mock.calls[1][1]["created_at"]
|
|
34
|
+
assert stored_created_at.tzinfo is timezone.utc
|
|
35
|
+
if mod.engine.dialect.name in {"mysql", "mariadb"}:
|
|
36
|
+
# The default DATETIME columns store whole seconds.
|
|
37
|
+
assert abs(stored_created_at - created_at) < timedelta(seconds=1)
|
|
38
|
+
else:
|
|
39
|
+
assert stored_created_at == created_at
|
|
33
40
|
assert print_mock.calls == [
|
|
34
41
|
["Event:", {"id": None, "created_at": created_at}],
|
|
35
|
-
["Event from database:", {"id": 1, "created_at":
|
|
42
|
+
["Event from database:", {"id": 1, "created_at": stored_created_at}],
|
|
36
43
|
]
|
|
37
|
-
assert print_mock.calls[1][1]["created_at"].tzinfo is timezone.utc
|
|
38
44
|
|
|
39
45
|
table = SQLModel.metadata.tables["event"]
|
|
40
46
|
assert table.c.created_at.type.timezone is True
|
|
@@ -3,7 +3,7 @@ from decimal import Decimal
|
|
|
3
3
|
from types import ModuleType
|
|
4
4
|
|
|
5
5
|
import pytest
|
|
6
|
-
from
|
|
6
|
+
from sqlalchemy import Engine
|
|
7
7
|
|
|
8
8
|
from ...conftest import PrintMock
|
|
9
9
|
|
|
@@ -14,10 +14,9 @@ from ...conftest import PrintMock
|
|
|
14
14
|
pytest.param("tutorial001_py310"),
|
|
15
15
|
],
|
|
16
16
|
)
|
|
17
|
-
def get_module(request: pytest.FixtureRequest) -> ModuleType:
|
|
17
|
+
def get_module(request: pytest.FixtureRequest, database_engine: Engine) -> ModuleType:
|
|
18
18
|
mod = importlib.import_module(f"docs_src.advanced.decimal.{request.param}")
|
|
19
|
-
mod.
|
|
20
|
-
mod.engine = create_engine(mod.sqlite_url)
|
|
19
|
+
mod.engine = database_engine
|
|
21
20
|
return mod
|
|
22
21
|
|
|
23
22
|
|
|
@@ -3,7 +3,7 @@ from types import ModuleType
|
|
|
3
3
|
|
|
4
4
|
import pytest
|
|
5
5
|
from dirty_equals import IsUUID
|
|
6
|
-
from
|
|
6
|
+
from sqlalchemy import Engine
|
|
7
7
|
|
|
8
8
|
from ...conftest import PrintMock
|
|
9
9
|
|
|
@@ -14,10 +14,9 @@ from ...conftest import PrintMock
|
|
|
14
14
|
pytest.param("tutorial001_py310"),
|
|
15
15
|
],
|
|
16
16
|
)
|
|
17
|
-
def get_module(request: pytest.FixtureRequest) -> ModuleType:
|
|
17
|
+
def get_module(request: pytest.FixtureRequest, database_engine: Engine) -> ModuleType:
|
|
18
18
|
mod = importlib.import_module(f"docs_src.advanced.uuid.{request.param}")
|
|
19
|
-
mod.
|
|
20
|
-
mod.engine = create_engine(mod.sqlite_url)
|
|
19
|
+
mod.engine = database_engine
|
|
21
20
|
return mod
|
|
22
21
|
|
|
23
22
|
|
|
@@ -3,7 +3,7 @@ from types import ModuleType
|
|
|
3
3
|
|
|
4
4
|
import pytest
|
|
5
5
|
from dirty_equals import IsUUID
|
|
6
|
-
from
|
|
6
|
+
from sqlalchemy import Engine
|
|
7
7
|
|
|
8
8
|
from ...conftest import PrintMock
|
|
9
9
|
|
|
@@ -14,10 +14,9 @@ from ...conftest import PrintMock
|
|
|
14
14
|
pytest.param("tutorial002_py310"),
|
|
15
15
|
],
|
|
16
16
|
)
|
|
17
|
-
def get_module(request: pytest.FixtureRequest) -> ModuleType:
|
|
17
|
+
def get_module(request: pytest.FixtureRequest, database_engine: Engine) -> ModuleType:
|
|
18
18
|
mod = importlib.import_module(f"docs_src.advanced.uuid.{request.param}")
|
|
19
|
-
mod.
|
|
20
|
-
mod.engine = create_engine(mod.sqlite_url)
|
|
19
|
+
mod.engine = database_engine
|
|
21
20
|
return mod
|
|
22
21
|
|
|
23
22
|
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import uuid
|
|
2
2
|
|
|
3
|
-
from
|
|
3
|
+
from sqlalchemy import Engine
|
|
4
|
+
from sqlmodel import Field, Session, SQLModel, select
|
|
4
5
|
|
|
5
6
|
|
|
6
|
-
def test_annotated_optional_types(
|
|
7
|
+
def test_annotated_optional_types(database_engine: Engine) -> None:
|
|
7
8
|
from pydantic import UUID4
|
|
8
9
|
|
|
9
10
|
class Hero(SQLModel, table=True):
|
|
10
11
|
# Pydantic UUID4 is: Annotated[UUID, UuidVersion(4)]
|
|
11
12
|
id: UUID4 | None = Field(default_factory=uuid.uuid4, primary_key=True)
|
|
12
13
|
|
|
13
|
-
engine =
|
|
14
|
+
engine = database_engine
|
|
14
15
|
SQLModel.metadata.create_all(engine)
|
|
15
16
|
with Session(engine) as db:
|
|
16
17
|
hero = Hero()
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
from collections.abc import Callable
|
|
1
2
|
from datetime import date, datetime, time, timedelta, timezone, tzinfo
|
|
2
3
|
from io import StringIO
|
|
4
|
+
from operator import add, sub
|
|
3
5
|
from typing import Annotated, Any
|
|
4
6
|
|
|
5
7
|
import pytest
|
|
@@ -7,7 +9,7 @@ from alembic.autogenerate import compare_metadata, render_python_code
|
|
|
7
9
|
from alembic.migration import MigrationContext
|
|
8
10
|
from alembic.operations import Operations, ops
|
|
9
11
|
from pydantic import AwareDatetime, NaiveDatetime, ValidationError
|
|
10
|
-
from sqlalchemy import Column, Date, DateTime, Interval, Time
|
|
12
|
+
from sqlalchemy import Column, Date, DateTime, Engine, Interval, Time
|
|
11
13
|
from sqlalchemy.dialects import mysql, postgresql, sqlite
|
|
12
14
|
from sqlalchemy.exc import StatementError
|
|
13
15
|
from sqlalchemy.schema import CreateTable
|
|
@@ -145,7 +147,7 @@ def test_datetime_column_types(dialect: Any, aware_type: str, naive_type: str) -
|
|
|
145
147
|
assert f"local_time {naive_type} NOT NULL" in ddl
|
|
146
148
|
|
|
147
149
|
|
|
148
|
-
def
|
|
150
|
+
def test_datetime_round_trip(database_engine: Engine) -> None:
|
|
149
151
|
class Event(SQLModel, table=True):
|
|
150
152
|
id: int | None = Field(default=None, primary_key=True)
|
|
151
153
|
occurred_at: datetime
|
|
@@ -154,7 +156,7 @@ def test_sqlite_datetime_round_trip() -> None:
|
|
|
154
156
|
|
|
155
157
|
aware = datetime(2026, 1, 1, 12, tzinfo=timezone(timedelta(hours=2)))
|
|
156
158
|
naive = datetime(2026, 1, 1, 12)
|
|
157
|
-
engine =
|
|
159
|
+
engine = database_engine
|
|
158
160
|
SQLModel.metadata.create_all(engine)
|
|
159
161
|
with Session(engine) as session:
|
|
160
162
|
event = Event(occurred_at=aware, local_time=naive)
|
|
@@ -162,12 +164,6 @@ def test_sqlite_datetime_round_trip() -> None:
|
|
|
162
164
|
session.flush()
|
|
163
165
|
# Binding doesn't change the original value on the model.
|
|
164
166
|
assert event.occurred_at is aware
|
|
165
|
-
assert (
|
|
166
|
-
session.connection()
|
|
167
|
-
.exec_driver_sql("SELECT occurred_at FROM event")
|
|
168
|
-
.scalar_one()
|
|
169
|
-
== "2026-01-01 10:00:00.000000"
|
|
170
|
-
)
|
|
171
167
|
session.commit()
|
|
172
168
|
session.refresh(event)
|
|
173
169
|
assert event.occurred_at == aware
|
|
@@ -201,7 +197,9 @@ class UndefinedOffset(tzinfo):
|
|
|
201
197
|
|
|
202
198
|
@pytest.mark.parametrize("offset", [None, UndefinedOffset()])
|
|
203
199
|
@pytest.mark.parametrize("operation", ["insert", "update", "filter"])
|
|
204
|
-
def test_naive_database_parameters(
|
|
200
|
+
def test_naive_database_parameters(
|
|
201
|
+
database_engine: Engine, offset: tzinfo | None, operation: str
|
|
202
|
+
) -> None:
|
|
205
203
|
class Event(SQLModel, table=True):
|
|
206
204
|
id: int | None = Field(default=None, primary_key=True)
|
|
207
205
|
occurred_at: datetime
|
|
@@ -211,7 +209,7 @@ def test_naive_database_parameters(offset: tzinfo | None, operation: str) -> Non
|
|
|
211
209
|
# Plain datetime validation remains permissive, including a tzinfo object
|
|
212
210
|
# that doesn't actually provide an offset.
|
|
213
211
|
assert event.occurred_at is naive
|
|
214
|
-
engine =
|
|
212
|
+
engine = database_engine
|
|
215
213
|
SQLModel.metadata.create_all(engine)
|
|
216
214
|
with Session(engine) as session:
|
|
217
215
|
with pytest.raises(StatementError, match="timezone information") as exc_info:
|
|
@@ -227,7 +225,9 @@ def test_naive_database_parameters(offset: tzinfo | None, operation: str) -> Non
|
|
|
227
225
|
|
|
228
226
|
|
|
229
227
|
@pytest.mark.parametrize("timezone_enabled", [False, True])
|
|
230
|
-
def
|
|
228
|
+
def test_sqlite_explicit_datetime_bypasses_utc_processing(
|
|
229
|
+
timezone_enabled: bool,
|
|
230
|
+
) -> None:
|
|
231
231
|
class Event(SQLModel, table=True):
|
|
232
232
|
id: int | None = Field(default=None, primary_key=True)
|
|
233
233
|
occurred_at: datetime = Field(sa_type=DateTime(timezone=timezone_enabled))
|
|
@@ -264,6 +264,34 @@ def test_postgresql_datetime_processing() -> None:
|
|
|
264
264
|
assert result(None) is None
|
|
265
265
|
|
|
266
266
|
|
|
267
|
+
@pytest.mark.parametrize(
|
|
268
|
+
"operation, reverse",
|
|
269
|
+
[(add, False), (sub, False), (add, True)],
|
|
270
|
+
)
|
|
271
|
+
def test_postgresql_datetime_interval_arithmetic(
|
|
272
|
+
operation: Callable[[Any, Any], Any], reverse: bool
|
|
273
|
+
) -> None:
|
|
274
|
+
class Event(SQLModel, table=True):
|
|
275
|
+
id: int | None = Field(default=None, primary_key=True)
|
|
276
|
+
occurred_at: datetime
|
|
277
|
+
|
|
278
|
+
occurred_at = SQLModel.metadata.tables["event"].c.occurred_at
|
|
279
|
+
duration = timedelta(days=30)
|
|
280
|
+
expression = (
|
|
281
|
+
operation(duration, occurred_at)
|
|
282
|
+
if reverse
|
|
283
|
+
else operation(occurred_at, duration)
|
|
284
|
+
)
|
|
285
|
+
# Adding or subtracting a duration still produces a UTC datetime.
|
|
286
|
+
assert isinstance(expression.type, UTCDateTime)
|
|
287
|
+
# Exercise the actual parameter processor used for database execution.
|
|
288
|
+
parameter = expression.left if reverse else expression.right
|
|
289
|
+
dialect = postgresql.dialect()
|
|
290
|
+
bind = parameter.type.dialect_impl(dialect).bind_processor(dialect)
|
|
291
|
+
bound = bind(parameter.value) if bind is not None else parameter.value
|
|
292
|
+
assert bound == duration
|
|
293
|
+
|
|
294
|
+
|
|
267
295
|
def test_existing_sqlite_utc_data() -> None:
|
|
268
296
|
class Event(SQLModel, table=True):
|
|
269
297
|
id: int | None = Field(default=None, primary_key=True)
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
from typing import Any
|
|
2
2
|
|
|
3
3
|
import pytest
|
|
4
|
-
from sqlalchemy import ForeignKey, Integer, String
|
|
5
|
-
from sqlmodel import Field, SQLModel
|
|
4
|
+
from sqlalchemy import Engine, ForeignKey, Integer, String, inspect
|
|
5
|
+
from sqlmodel import Field, SQLModel
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
def test_sa_column_args(
|
|
8
|
+
def test_sa_column_args(database_engine: Engine) -> None:
|
|
9
9
|
class Team(SQLModel, table=True):
|
|
10
10
|
id: int | None = Field(default=None, primary_key=True)
|
|
11
11
|
name: str
|
|
@@ -17,27 +17,26 @@ def test_sa_column_args(clear_sqlmodel, caplog) -> None:
|
|
|
17
17
|
sa_column_args=[ForeignKey("team.id")],
|
|
18
18
|
)
|
|
19
19
|
|
|
20
|
-
engine =
|
|
20
|
+
engine = database_engine
|
|
21
21
|
SQLModel.metadata.create_all(engine)
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
assert "
|
|
22
|
+
foreign_keys = inspect(engine).get_foreign_keys("hero")
|
|
23
|
+
assert len(foreign_keys) == 1
|
|
24
|
+
assert foreign_keys[0]["constrained_columns"] == ["team_id"]
|
|
25
|
+
assert foreign_keys[0]["referred_table"] == "team"
|
|
26
|
+
assert foreign_keys[0]["referred_columns"] == ["id"]
|
|
26
27
|
|
|
27
28
|
|
|
28
|
-
def test_sa_column_kargs(
|
|
29
|
+
def test_sa_column_kargs(database_engine: Engine) -> None:
|
|
29
30
|
class Item(SQLModel, table=True):
|
|
30
31
|
id: int | None = Field(
|
|
31
32
|
default=None,
|
|
32
33
|
sa_column_kwargs={"primary_key": True},
|
|
33
34
|
)
|
|
34
35
|
|
|
35
|
-
engine =
|
|
36
|
+
engine = database_engine
|
|
36
37
|
SQLModel.metadata.create_all(engine)
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
][0]
|
|
40
|
-
assert "PRIMARY KEY (id)" in create_table_log
|
|
38
|
+
primary_key = inspect(engine).get_pk_constraint("item")
|
|
39
|
+
assert primary_key["constrained_columns"] == ["id"]
|
|
41
40
|
|
|
42
41
|
|
|
43
42
|
@pytest.mark.parametrize(
|
|
@@ -2,10 +2,11 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from typing import Annotated
|
|
4
4
|
|
|
5
|
-
from
|
|
5
|
+
from sqlalchemy import Engine
|
|
6
|
+
from sqlmodel import Field, Session, SQLModel, select
|
|
6
7
|
|
|
7
8
|
|
|
8
|
-
def test_model_with_future_annotations(
|
|
9
|
+
def test_model_with_future_annotations(database_engine: Engine):
|
|
9
10
|
class Hero(SQLModel, table=True):
|
|
10
11
|
id: Annotated[int | None, Field(primary_key=True)] = None
|
|
11
12
|
name: str
|
|
@@ -14,7 +15,7 @@ def test_model_with_future_annotations(clear_sqlmodel):
|
|
|
14
15
|
|
|
15
16
|
hero = Hero(name="Deadpond", secret_name="Dive Wilson", age=25)
|
|
16
17
|
|
|
17
|
-
engine =
|
|
18
|
+
engine = database_engine
|
|
18
19
|
SQLModel.metadata.create_all(engine)
|
|
19
20
|
|
|
20
21
|
with Session(engine) as session:
|
|
@@ -33,7 +34,7 @@ def test_model_with_future_annotations(clear_sqlmodel):
|
|
|
33
34
|
assert heroes[0].name == "Deadpond"
|
|
34
35
|
|
|
35
36
|
|
|
36
|
-
def test_model_with_string_annotations(
|
|
37
|
+
def test_model_with_string_annotations(database_engine: Engine):
|
|
37
38
|
class Team(SQLModel, table=True):
|
|
38
39
|
id: Annotated[int | None, Field(primary_key=True)] = None
|
|
39
40
|
name: str
|
|
@@ -43,7 +44,7 @@ def test_model_with_string_annotations(clear_sqlmodel):
|
|
|
43
44
|
name: str
|
|
44
45
|
team_id: Annotated[int | None, Field(foreign_key="team.id")] = None
|
|
45
46
|
|
|
46
|
-
engine =
|
|
47
|
+
engine = database_engine
|
|
47
48
|
SQLModel.metadata.create_all(engine)
|
|
48
49
|
|
|
49
50
|
team = Team(name="Champions")
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import pytest
|
|
2
2
|
from pydantic import ValidationError
|
|
3
|
-
from
|
|
3
|
+
from sqlalchemy import Engine
|
|
4
|
+
from sqlmodel import Field, Session, SQLModel, select
|
|
4
5
|
|
|
5
6
|
|
|
6
|
-
def test_allow_instantiation_without_arguments(
|
|
7
|
+
def test_allow_instantiation_without_arguments(database_engine: Engine):
|
|
7
8
|
class Item(SQLModel, table=True):
|
|
8
9
|
id: int | None = Field(default=None, primary_key=True)
|
|
9
10
|
name: str
|
|
10
11
|
description: str | None = None
|
|
11
12
|
|
|
12
|
-
engine =
|
|
13
|
+
engine = database_engine
|
|
13
14
|
SQLModel.metadata.create_all(engine)
|
|
14
15
|
with Session(engine) as db:
|
|
15
16
|
item = Item()
|
|
@@ -20,7 +21,6 @@ def test_allow_instantiation_without_arguments(clear_sqlmodel):
|
|
|
20
21
|
result = db.exec(statement).all()
|
|
21
22
|
assert len(result) == 1
|
|
22
23
|
assert isinstance(item.id, int)
|
|
23
|
-
SQLModel.metadata.clear()
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
def test_not_allow_instantiation_without_arguments_if_not_table():
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
from typing import Annotated
|
|
2
2
|
|
|
3
3
|
import pytest
|
|
4
|
+
from sqlalchemy import Engine
|
|
4
5
|
from sqlalchemy.exc import IntegrityError
|
|
5
6
|
from sqlalchemy.orm import RelationshipProperty
|
|
6
|
-
from sqlmodel import Field, Relationship, Session, SQLModel,
|
|
7
|
+
from sqlmodel import Field, Relationship, Session, SQLModel, select
|
|
7
8
|
|
|
8
9
|
|
|
9
|
-
def test_should_allow_duplicate_row_if_unique_constraint_is_not_passed(
|
|
10
|
+
def test_should_allow_duplicate_row_if_unique_constraint_is_not_passed(
|
|
11
|
+
database_engine: Engine,
|
|
12
|
+
):
|
|
10
13
|
class Hero(SQLModel, table=True):
|
|
11
14
|
id: int | None = Field(default=None, primary_key=True)
|
|
12
15
|
name: str
|
|
@@ -16,7 +19,7 @@ def test_should_allow_duplicate_row_if_unique_constraint_is_not_passed(clear_sql
|
|
|
16
19
|
hero_1 = Hero(name="Deadpond", secret_name="Dive Wilson")
|
|
17
20
|
hero_2 = Hero(name="Deadpond", secret_name="Dive Wilson")
|
|
18
21
|
|
|
19
|
-
engine =
|
|
22
|
+
engine = database_engine
|
|
20
23
|
|
|
21
24
|
SQLModel.metadata.create_all(engine)
|
|
22
25
|
|
|
@@ -36,7 +39,9 @@ def test_should_allow_duplicate_row_if_unique_constraint_is_not_passed(clear_sql
|
|
|
36
39
|
assert heroes[0].name == heroes[1].name
|
|
37
40
|
|
|
38
41
|
|
|
39
|
-
def test_should_allow_duplicate_row_if_unique_constraint_is_false(
|
|
42
|
+
def test_should_allow_duplicate_row_if_unique_constraint_is_false(
|
|
43
|
+
database_engine: Engine,
|
|
44
|
+
):
|
|
40
45
|
class Hero(SQLModel, table=True):
|
|
41
46
|
id: int | None = Field(default=None, primary_key=True)
|
|
42
47
|
name: str
|
|
@@ -46,7 +51,7 @@ def test_should_allow_duplicate_row_if_unique_constraint_is_false(clear_sqlmodel
|
|
|
46
51
|
hero_1 = Hero(name="Deadpond", secret_name="Dive Wilson")
|
|
47
52
|
hero_2 = Hero(name="Deadpond", secret_name="Dive Wilson")
|
|
48
53
|
|
|
49
|
-
engine =
|
|
54
|
+
engine = database_engine
|
|
50
55
|
|
|
51
56
|
SQLModel.metadata.create_all(engine)
|
|
52
57
|
|
|
@@ -67,7 +72,7 @@ def test_should_allow_duplicate_row_if_unique_constraint_is_false(clear_sqlmodel
|
|
|
67
72
|
|
|
68
73
|
|
|
69
74
|
def test_should_raise_exception_when_try_to_duplicate_row_if_unique_constraint_is_true(
|
|
70
|
-
|
|
75
|
+
database_engine: Engine,
|
|
71
76
|
):
|
|
72
77
|
class Hero(SQLModel, table=True):
|
|
73
78
|
id: int | None = Field(default=None, primary_key=True)
|
|
@@ -78,7 +83,7 @@ def test_should_raise_exception_when_try_to_duplicate_row_if_unique_constraint_i
|
|
|
78
83
|
hero_1 = Hero(name="Deadpond", secret_name="Dive Wilson")
|
|
79
84
|
hero_2 = Hero(name="Deadpond", secret_name="Dive Wilson")
|
|
80
85
|
|
|
81
|
-
engine =
|
|
86
|
+
engine = database_engine
|
|
82
87
|
|
|
83
88
|
SQLModel.metadata.create_all(engine)
|
|
84
89
|
|
|
@@ -93,7 +98,7 @@ def test_should_raise_exception_when_try_to_duplicate_row_if_unique_constraint_i
|
|
|
93
98
|
session.commit()
|
|
94
99
|
|
|
95
100
|
|
|
96
|
-
def test_sa_relationship_property(
|
|
101
|
+
def test_sa_relationship_property(database_engine: Engine):
|
|
97
102
|
"""Test https://github.com/tiangolo/sqlmodel/issues/315#issuecomment-1272122306"""
|
|
98
103
|
|
|
99
104
|
class Team(SQLModel, table=True):
|
|
@@ -114,7 +119,7 @@ def test_sa_relationship_property(clear_sqlmodel):
|
|
|
114
119
|
team_preventers = Team(name="Preventers")
|
|
115
120
|
hero_rusty_man = Hero(name="Rusty-Man", team=team_preventers)
|
|
116
121
|
|
|
117
|
-
engine =
|
|
122
|
+
engine = database_engine
|
|
118
123
|
|
|
119
124
|
SQLModel.metadata.create_all(engine)
|
|
120
125
|
|
|
@@ -127,13 +132,13 @@ def test_sa_relationship_property(clear_sqlmodel):
|
|
|
127
132
|
assert hero_rusty_man.team.name == "Preventers"
|
|
128
133
|
|
|
129
134
|
|
|
130
|
-
def test_composite_primary_key(
|
|
135
|
+
def test_composite_primary_key(database_engine: Engine):
|
|
131
136
|
class UserPermission(SQLModel, table=True):
|
|
132
137
|
user_id: int = Field(primary_key=True)
|
|
133
138
|
resource_id: int = Field(primary_key=True)
|
|
134
139
|
permission: str
|
|
135
140
|
|
|
136
|
-
engine =
|
|
141
|
+
engine = database_engine
|
|
137
142
|
SQLModel.metadata.create_all(engine)
|
|
138
143
|
|
|
139
144
|
pk_column_names = {column.name for column in UserPermission.__table__.primary_key}
|
|
@@ -153,7 +158,7 @@ def test_composite_primary_key(clear_sqlmodel):
|
|
|
153
158
|
session.commit()
|
|
154
159
|
|
|
155
160
|
|
|
156
|
-
def test_composite_primary_key_and_validator(
|
|
161
|
+
def test_composite_primary_key_and_validator(database_engine: Engine):
|
|
157
162
|
from pydantic import AfterValidator
|
|
158
163
|
|
|
159
164
|
def validate_resource_id(value: int) -> int:
|
|
@@ -168,7 +173,7 @@ def test_composite_primary_key_and_validator(clear_sqlmodel):
|
|
|
168
173
|
)
|
|
169
174
|
permission: str
|
|
170
175
|
|
|
171
|
-
engine =
|
|
176
|
+
engine = database_engine
|
|
172
177
|
SQLModel.metadata.create_all(engine)
|
|
173
178
|
|
|
174
179
|
pk_column_names = {column.name for column in UserPermission.__table__.primary_key}
|
|
@@ -188,7 +193,7 @@ def test_composite_primary_key_and_validator(clear_sqlmodel):
|
|
|
188
193
|
session.commit()
|
|
189
194
|
|
|
190
195
|
|
|
191
|
-
def test_foreign_key_ondelete_with_annotated(
|
|
196
|
+
def test_foreign_key_ondelete_with_annotated(database_engine: Engine):
|
|
192
197
|
from pydantic import AfterValidator
|
|
193
198
|
|
|
194
199
|
def ensure_positive(value: int) -> int:
|
|
@@ -208,7 +213,7 @@ def test_foreign_key_ondelete_with_annotated(clear_sqlmodel):
|
|
|
208
213
|
)
|
|
209
214
|
name: str
|
|
210
215
|
|
|
211
|
-
engine =
|
|
216
|
+
engine = database_engine
|
|
212
217
|
SQLModel.metadata.create_all(engine)
|
|
213
218
|
|
|
214
219
|
team_id_column = Hero.__table__.c.team_id # type: ignore[attr-defined]
|