sqlmodel 0.0.46__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.46 → sqlmodel-0.0.47}/PKG-INFO +1 -1
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial003_py310.py +3 -2
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial004_py310.py +3 -2
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial005_py310.py +3 -2
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/pyproject.toml +3 -1
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/sqlmodel/__init__.py +1 -1
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/sqlmodel/sql/sqltypes.py +1 -1
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/conftest.py +24 -1
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_advanced/test_datetime/test_tutorial001.py +13 -7
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_advanced/test_decimal/test_tutorial001.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_advanced/test_uuid/test_tutorial001.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_advanced/test_uuid/test_tutorial002.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_annotated_uuid.py +4 -3
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_datetime.py +10 -12
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_field_sa_args_kwargs.py +13 -14
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_future_annotations.py +6 -5
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_instance_no_args.py +4 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_main.py +20 -15
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_nullable.py +39 -34
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_query.py +4 -3
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_select_typing.py +4 -6
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_automatic_id_none_refresh/test_tutorial001_tutorial002.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_code_structure/test_tutorial001.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_code_structure/test_tutorial002.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_create_connected_tables/test_tutorial001.py +3 -5
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_delete/test_tutorial001.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_insert/test_tutorial001.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_select/test_tutorial001_tutorial002.py +8 -6
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_select/test_tutorial003.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_select/test_tutorial004.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_select/test_tutorial005.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_update/test_tutorial001.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_create_db_and_table/test_tutorial002.py +3 -5
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_create_db_and_table/test_tutorial003.py +3 -5
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_delete/test_tutorial001_tutorial002.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_delete/test_tutorial001.py +3 -7
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_limit_and_offset/test_tutorial001.py +3 -7
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_multiple_models/test_tutorial001.py +9 -27
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_multiple_models/test_tutorial002.py +9 -27
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_read_one/test_tutorial001.py +3 -7
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_relationships/test_tutorial001.py +3 -7
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_response_model/test_tutorial001.py +3 -7
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_session_with_dependency/test_tutorial001.py +3 -7
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_simple_hero_api/test_tutorial001.py +3 -7
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_teams/test_tutorial001.py +3 -7
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_update/test_tutorial001.py +3 -7
- {sqlmodel-0.0.46 → 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.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_insert/test_tutorial001.py +4 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_insert/test_tutorial002.py +4 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_insert/test_tutorial003.py +4 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_limit_and_offset/test_tutorial001.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_limit_and_offset/test_tutorial002.py +3 -4
- {sqlmodel-0.0.46 → 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.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_many_to_many/test_tutorial001.py +7 -6
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_many_to_many/test_tutorial002.py +13 -10
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_many_to_many/test_tutorial003.py +14 -9
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_one/test_tutorial001.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_one/test_tutorial002.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_one/test_tutorial003.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_one/test_tutorial004.py +10 -6
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_one/test_tutorial005.py +10 -6
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_one/test_tutorial006.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_one/test_tutorial007.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_one/test_tutorial008.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_one/test_tutorial009.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_back_populates/test_tutorial001.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_back_populates/test_tutorial002.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_back_populates/test_tutorial003.py +3 -5
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_create_and_update_relationships/test_tutorial001.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_define_relationship_attributes/test_tutorial001.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial001.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial002.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial003.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial004.py +5 -5
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial005.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_read_relationships/test_tutorial001.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_read_relationships/test_tutorial002.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_select/test_tutorial001_tutorial002.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_select/test_tutorial003_tutorial004.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_update/test_tutorial001_tutorial002.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_update/test_tutorial003_tutorial004.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial001.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial002.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial003.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial004.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial005.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial006.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial006b.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial007.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial008.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial009.py +3 -4
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial011.py +3 -4
- sqlmodel-0.0.46/tests/test_tutorial/test_indexes/test_tutorial001.py +0 -51
- sqlmodel-0.0.46/tests/test_tutorial/test_indexes/test_tutorial002.py +0 -52
- sqlmodel-0.0.46/tests/test_tutorial/test_limit_and_offset/test_tutorial004.py +0 -32
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/LICENSE +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/README.md +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/advanced/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/advanced/datetime/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/advanced/datetime/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/advanced/datetime/tutorial001_py311.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/advanced/datetime/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/advanced/datetime/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/advanced/datetime/tutorial004_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/advanced/datetime/tutorial005_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/advanced/decimal/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/advanced/decimal/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/advanced/uuid/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/advanced/uuid/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/advanced/uuid/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/automatic_id_none_refresh/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/automatic_id_none_refresh/annotations/en/tutorial002.md +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/automatic_id_none_refresh/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/automatic_id_none_refresh/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/code_structure/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/code_structure/tutorial001_py310/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/code_structure/tutorial001_py310/app.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/code_structure/tutorial001_py310/database.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/code_structure/tutorial001_py310/models.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/code_structure/tutorial002_py310/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/code_structure/tutorial002_py310/app.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/code_structure/tutorial002_py310/database.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/code_structure/tutorial002_py310/hero_model.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/code_structure/tutorial002_py310/team_model.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/connect/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/connect/create_tables/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/connect/create_tables/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/connect/delete/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/connect/delete/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/connect/insert/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/connect/insert/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/connect/select/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/connect/select/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/connect/select/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/connect/select/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/connect/select/tutorial004_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/connect/select/tutorial005_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/connect/update/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/connect/update/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/create_db_and_table/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/create_db_and_table/annotations/en/tutorial003.md +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/create_db_and_table/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/create_db_and_table/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/create_db_and_table/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/delete/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/delete/annotations/en/tutorial002.md +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/delete/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/delete/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/annotations/en/test_main_001.md +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/annotations/en/test_main_002.md +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/annotations/en/test_main_003.md +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/annotations/en/test_main_004.md +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/annotations/en/test_main_005.md +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/annotations/en/test_main_006.md +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/main.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_extra_coverage.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main_001.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main_002.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main_003.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main_004.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main_005.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main_006.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/delete/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/delete/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/limit_and_offset/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/limit_and_offset/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/multiple_models/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/multiple_models/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/multiple_models/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/read_one/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/read_one/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/relationships/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/relationships/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/response_model/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/response_model/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/session_with_dependency/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/session_with_dependency/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/simple_hero_api/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/simple_hero_api/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/teams/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/teams/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/update/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/update/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/update/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/indexes/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/indexes/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/indexes/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/insert/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/insert/annotations/en/tutorial003.md +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/insert/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/insert/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/insert/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/many_to_many/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/many_to_many/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/many_to_many/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/many_to_many/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/offset_and_limit/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/offset_and_limit/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/offset_and_limit/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/offset_and_limit/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/offset_and_limit/tutorial004_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/one/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/one/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/one/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/one/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/one/tutorial004_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/one/tutorial005_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/one/tutorial006_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/one/tutorial007_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/one/tutorial008_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/one/tutorial009_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/back_populates/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/back_populates/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/back_populates/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/back_populates/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/create_and_update_relationships/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/create_and_update_relationships/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/define_relationship_attributes/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/define_relationship_attributes/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/read_relationships/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/read_relationships/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/read_relationships/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/select/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/select/annotations/en/tutorial002.md +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/select/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/select/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/select/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/select/tutorial004_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/update/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/update/annotations/en/tutorial002.md +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/update/annotations/en/tutorial004.md +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/update/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/update/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/update/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/update/tutorial004_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/where/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial004_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial005_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial006_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial006b_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial007_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial008_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial009_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial011_py310.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/scripts/add_latest_release_date.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/scripts/deploy_docs_status.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/scripts/docs.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/scripts/format.sh +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/scripts/generate_select.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/scripts/lint.sh +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/scripts/prepare_release.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/scripts/test.sh +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/sqlmodel/.agents/skills/sqlmodel/SKILL.md +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/sqlmodel/_compat.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/sqlmodel/default.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/sqlmodel/ext/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/sqlmodel/ext/asyncio/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/sqlmodel/ext/asyncio/session.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/sqlmodel/main.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/sqlmodel/orm/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/sqlmodel/orm/session.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/sqlmodel/pool/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/sqlmodel/py.typed +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/sqlmodel/sql/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/sqlmodel/sql/_expression_select_cls.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/sqlmodel/sql/_expression_select_gen.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/sqlmodel/sql/_expression_select_gen.py.jinja2 +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/sqlmodel/sql/base.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/sqlmodel/sql/expression.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_advanced/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_advanced/test_datetime/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_advanced/test_datetime/test_tutorial002.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_advanced/test_datetime/test_tutorial003.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_advanced/test_datetime/test_tutorial004.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_advanced/test_datetime/test_tutorial005.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_advanced/test_decimal/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_advanced/test_uuid/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_aliases.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_dataclass_transform.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_default.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_deprecations.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_enums.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_enums_models.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_field_sa_column.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_field_sa_relationship.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_field_sa_type.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_fields_set.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_missing_type.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_ondelete_raises.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_prepare_release.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_pydantic/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_pydantic/test_field.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_pydantic/test_model_dump.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_select_gen.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_sqlalchemy_type_errors.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_automatic_id_none_refresh/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_code_structure/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_create_connected_tables/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_delete/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_insert/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_select/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_update/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_create_db_and_table/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_create_db_and_table/test_tutorial001.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_delete/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_app_testing/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests001.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests002.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests003.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests004.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests005.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests006.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests_main.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_delete/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_limit_and_offset/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_multiple_models/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_read_one/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_relationships/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_response_model/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_session_with_dependency/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_simple_hero_api/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_teams/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_update/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_indexes/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_insert/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_limit_and_offset/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_many_to_many/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_one/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_back_populates/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_create_and_update_relationships/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_define_relationship_attributes/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_read_relationships/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_select/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_update/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/__init__.py +0 -0
- {sqlmodel-0.0.46 → sqlmodel-0.0.47}/tests/test_update.py +0 -0
- {sqlmodel-0.0.46 → 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",
|
|
@@ -56,6 +56,6 @@ class AutoString(types.TypeDecorator):
|
|
|
56
56
|
|
|
57
57
|
def load_dialect_impl(self, dialect: Dialect) -> "types.TypeEngine[Any]":
|
|
58
58
|
impl = cast(types.String, self.impl)
|
|
59
|
-
if impl.length is None and dialect.name
|
|
59
|
+
if impl.length is None and dialect.name in {"mysql", "mariadb"}:
|
|
60
60
|
return dialect.type_descriptor(types.String(self.mysql_default_length))
|
|
61
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()
|
|
@@ -9,7 +9,7 @@ from alembic.autogenerate import compare_metadata, render_python_code
|
|
|
9
9
|
from alembic.migration import MigrationContext
|
|
10
10
|
from alembic.operations import Operations, ops
|
|
11
11
|
from pydantic import AwareDatetime, NaiveDatetime, ValidationError
|
|
12
|
-
from sqlalchemy import Column, Date, DateTime, Interval, Time
|
|
12
|
+
from sqlalchemy import Column, Date, DateTime, Engine, Interval, Time
|
|
13
13
|
from sqlalchemy.dialects import mysql, postgresql, sqlite
|
|
14
14
|
from sqlalchemy.exc import StatementError
|
|
15
15
|
from sqlalchemy.schema import CreateTable
|
|
@@ -147,7 +147,7 @@ def test_datetime_column_types(dialect: Any, aware_type: str, naive_type: str) -
|
|
|
147
147
|
assert f"local_time {naive_type} NOT NULL" in ddl
|
|
148
148
|
|
|
149
149
|
|
|
150
|
-
def
|
|
150
|
+
def test_datetime_round_trip(database_engine: Engine) -> None:
|
|
151
151
|
class Event(SQLModel, table=True):
|
|
152
152
|
id: int | None = Field(default=None, primary_key=True)
|
|
153
153
|
occurred_at: datetime
|
|
@@ -156,7 +156,7 @@ def test_sqlite_datetime_round_trip() -> None:
|
|
|
156
156
|
|
|
157
157
|
aware = datetime(2026, 1, 1, 12, tzinfo=timezone(timedelta(hours=2)))
|
|
158
158
|
naive = datetime(2026, 1, 1, 12)
|
|
159
|
-
engine =
|
|
159
|
+
engine = database_engine
|
|
160
160
|
SQLModel.metadata.create_all(engine)
|
|
161
161
|
with Session(engine) as session:
|
|
162
162
|
event = Event(occurred_at=aware, local_time=naive)
|
|
@@ -164,12 +164,6 @@ def test_sqlite_datetime_round_trip() -> None:
|
|
|
164
164
|
session.flush()
|
|
165
165
|
# Binding doesn't change the original value on the model.
|
|
166
166
|
assert event.occurred_at is aware
|
|
167
|
-
assert (
|
|
168
|
-
session.connection()
|
|
169
|
-
.exec_driver_sql("SELECT occurred_at FROM event")
|
|
170
|
-
.scalar_one()
|
|
171
|
-
== "2026-01-01 10:00:00.000000"
|
|
172
|
-
)
|
|
173
167
|
session.commit()
|
|
174
168
|
session.refresh(event)
|
|
175
169
|
assert event.occurred_at == aware
|
|
@@ -203,7 +197,9 @@ class UndefinedOffset(tzinfo):
|
|
|
203
197
|
|
|
204
198
|
@pytest.mark.parametrize("offset", [None, UndefinedOffset()])
|
|
205
199
|
@pytest.mark.parametrize("operation", ["insert", "update", "filter"])
|
|
206
|
-
def test_naive_database_parameters(
|
|
200
|
+
def test_naive_database_parameters(
|
|
201
|
+
database_engine: Engine, offset: tzinfo | None, operation: str
|
|
202
|
+
) -> None:
|
|
207
203
|
class Event(SQLModel, table=True):
|
|
208
204
|
id: int | None = Field(default=None, primary_key=True)
|
|
209
205
|
occurred_at: datetime
|
|
@@ -213,7 +209,7 @@ def test_naive_database_parameters(offset: tzinfo | None, operation: str) -> Non
|
|
|
213
209
|
# Plain datetime validation remains permissive, including a tzinfo object
|
|
214
210
|
# that doesn't actually provide an offset.
|
|
215
211
|
assert event.occurred_at is naive
|
|
216
|
-
engine =
|
|
212
|
+
engine = database_engine
|
|
217
213
|
SQLModel.metadata.create_all(engine)
|
|
218
214
|
with Session(engine) as session:
|
|
219
215
|
with pytest.raises(StatementError, match="timezone information") as exc_info:
|
|
@@ -229,7 +225,9 @@ def test_naive_database_parameters(offset: tzinfo | None, operation: str) -> Non
|
|
|
229
225
|
|
|
230
226
|
|
|
231
227
|
@pytest.mark.parametrize("timezone_enabled", [False, True])
|
|
232
|
-
def
|
|
228
|
+
def test_sqlite_explicit_datetime_bypasses_utc_processing(
|
|
229
|
+
timezone_enabled: bool,
|
|
230
|
+
) -> None:
|
|
233
231
|
class Event(SQLModel, table=True):
|
|
234
232
|
id: int | None = Field(default=None, primary_key=True)
|
|
235
233
|
occurred_at: datetime = Field(sa_type=DateTime(timezone=timezone_enabled))
|
|
@@ -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]
|