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.
Files changed (359) hide show
  1. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/PKG-INFO +1 -1
  2. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial003_py310.py +3 -2
  3. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial004_py310.py +3 -2
  4. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial005_py310.py +3 -2
  5. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/pyproject.toml +3 -1
  6. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/__init__.py +1 -1
  7. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/sql/sqltypes.py +10 -2
  8. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/conftest.py +24 -1
  9. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_advanced/test_datetime/test_tutorial001.py +13 -7
  10. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_advanced/test_decimal/test_tutorial001.py +3 -4
  11. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_advanced/test_uuid/test_tutorial001.py +3 -4
  12. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_advanced/test_uuid/test_tutorial002.py +3 -4
  13. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_annotated_uuid.py +4 -3
  14. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_datetime.py +40 -12
  15. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_field_sa_args_kwargs.py +13 -14
  16. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_future_annotations.py +6 -5
  17. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_instance_no_args.py +4 -4
  18. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_main.py +20 -15
  19. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_nullable.py +39 -34
  20. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_query.py +4 -3
  21. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_select_typing.py +4 -6
  22. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_automatic_id_none_refresh/test_tutorial001_tutorial002.py +3 -4
  23. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_code_structure/test_tutorial001.py +3 -4
  24. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_code_structure/test_tutorial002.py +3 -4
  25. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_create_connected_tables/test_tutorial001.py +3 -5
  26. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_delete/test_tutorial001.py +3 -4
  27. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_insert/test_tutorial001.py +3 -4
  28. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_select/test_tutorial001_tutorial002.py +8 -6
  29. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_select/test_tutorial003.py +3 -4
  30. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_select/test_tutorial004.py +3 -4
  31. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_select/test_tutorial005.py +3 -4
  32. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_update/test_tutorial001.py +3 -4
  33. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_create_db_and_table/test_tutorial002.py +3 -5
  34. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_create_db_and_table/test_tutorial003.py +3 -5
  35. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_delete/test_tutorial001_tutorial002.py +3 -4
  36. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_delete/test_tutorial001.py +3 -7
  37. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_limit_and_offset/test_tutorial001.py +3 -7
  38. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_multiple_models/test_tutorial001.py +9 -27
  39. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_multiple_models/test_tutorial002.py +9 -27
  40. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_read_one/test_tutorial001.py +3 -7
  41. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_relationships/test_tutorial001.py +3 -7
  42. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_response_model/test_tutorial001.py +3 -7
  43. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_session_with_dependency/test_tutorial001.py +3 -7
  44. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_simple_hero_api/test_tutorial001.py +3 -7
  45. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_teams/test_tutorial001.py +3 -7
  46. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_update/test_tutorial001.py +3 -7
  47. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_update/test_tutorial002.py +4 -7
  48. sqlmodel-0.0.47/tests/test_tutorial/test_indexes/test_tutorial001.py +36 -0
  49. sqlmodel-0.0.47/tests/test_tutorial/test_indexes/test_tutorial002.py +37 -0
  50. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_insert/test_tutorial001.py +4 -4
  51. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_insert/test_tutorial002.py +4 -4
  52. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_insert/test_tutorial003.py +4 -4
  53. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_limit_and_offset/test_tutorial001.py +3 -4
  54. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_limit_and_offset/test_tutorial002.py +3 -4
  55. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_limit_and_offset/test_tutorial003.py +3 -4
  56. sqlmodel-0.0.47/tests/test_tutorial/test_limit_and_offset/test_tutorial004.py +42 -0
  57. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_many_to_many/test_tutorial001.py +7 -6
  58. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_many_to_many/test_tutorial002.py +13 -10
  59. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_many_to_many/test_tutorial003.py +14 -9
  60. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_one/test_tutorial001.py +3 -4
  61. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_one/test_tutorial002.py +3 -4
  62. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_one/test_tutorial003.py +3 -4
  63. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_one/test_tutorial004.py +10 -6
  64. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_one/test_tutorial005.py +10 -6
  65. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_one/test_tutorial006.py +3 -4
  66. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_one/test_tutorial007.py +3 -4
  67. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_one/test_tutorial008.py +3 -4
  68. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_one/test_tutorial009.py +3 -4
  69. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_back_populates/test_tutorial001.py +3 -4
  70. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_back_populates/test_tutorial002.py +3 -4
  71. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_back_populates/test_tutorial003.py +3 -5
  72. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_create_and_update_relationships/test_tutorial001.py +3 -4
  73. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_define_relationship_attributes/test_tutorial001.py +3 -4
  74. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial001.py +3 -4
  75. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial002.py +3 -4
  76. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial003.py +3 -4
  77. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial004.py +5 -5
  78. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial005.py +3 -4
  79. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_read_relationships/test_tutorial001.py +3 -4
  80. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_read_relationships/test_tutorial002.py +3 -4
  81. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_select/test_tutorial001_tutorial002.py +3 -4
  82. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_select/test_tutorial003_tutorial004.py +3 -4
  83. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_update/test_tutorial001_tutorial002.py +3 -4
  84. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_update/test_tutorial003_tutorial004.py +3 -4
  85. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial001.py +3 -4
  86. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial002.py +3 -4
  87. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial003.py +3 -4
  88. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial004.py +3 -4
  89. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial005.py +3 -4
  90. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial006.py +3 -4
  91. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial006b.py +3 -4
  92. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial007.py +3 -4
  93. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial008.py +3 -4
  94. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial009.py +3 -4
  95. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/test_tutorial011.py +3 -4
  96. sqlmodel-0.0.45/tests/test_tutorial/test_indexes/test_tutorial001.py +0 -51
  97. sqlmodel-0.0.45/tests/test_tutorial/test_indexes/test_tutorial002.py +0 -52
  98. sqlmodel-0.0.45/tests/test_tutorial/test_limit_and_offset/test_tutorial004.py +0 -32
  99. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/LICENSE +0 -0
  100. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/README.md +0 -0
  101. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/__init__.py +0 -0
  102. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/advanced/__init__.py +0 -0
  103. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/advanced/datetime/__init__.py +0 -0
  104. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/advanced/datetime/tutorial001_py310.py +0 -0
  105. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/advanced/datetime/tutorial001_py311.py +0 -0
  106. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/advanced/datetime/tutorial002_py310.py +0 -0
  107. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/advanced/datetime/tutorial003_py310.py +0 -0
  108. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/advanced/datetime/tutorial004_py310.py +0 -0
  109. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/advanced/datetime/tutorial005_py310.py +0 -0
  110. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/advanced/decimal/__init__.py +0 -0
  111. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/advanced/decimal/tutorial001_py310.py +0 -0
  112. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/advanced/uuid/__init__.py +0 -0
  113. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/advanced/uuid/tutorial001_py310.py +0 -0
  114. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/advanced/uuid/tutorial002_py310.py +0 -0
  115. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/__init__.py +0 -0
  116. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/automatic_id_none_refresh/__init__.py +0 -0
  117. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/automatic_id_none_refresh/annotations/en/tutorial002.md +0 -0
  118. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/automatic_id_none_refresh/tutorial001_py310.py +0 -0
  119. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/automatic_id_none_refresh/tutorial002_py310.py +0 -0
  120. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/code_structure/__init__.py +0 -0
  121. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/code_structure/tutorial001_py310/__init__.py +0 -0
  122. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/code_structure/tutorial001_py310/app.py +0 -0
  123. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/code_structure/tutorial001_py310/database.py +0 -0
  124. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/code_structure/tutorial001_py310/models.py +0 -0
  125. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/code_structure/tutorial002_py310/__init__.py +0 -0
  126. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/code_structure/tutorial002_py310/app.py +0 -0
  127. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/code_structure/tutorial002_py310/database.py +0 -0
  128. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/code_structure/tutorial002_py310/hero_model.py +0 -0
  129. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/code_structure/tutorial002_py310/team_model.py +0 -0
  130. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/connect/__init__.py +0 -0
  131. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/connect/create_tables/__init__.py +0 -0
  132. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/connect/create_tables/tutorial001_py310.py +0 -0
  133. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/connect/delete/__init__.py +0 -0
  134. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/connect/delete/tutorial001_py310.py +0 -0
  135. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/connect/insert/__init__.py +0 -0
  136. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/connect/insert/tutorial001_py310.py +0 -0
  137. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/connect/select/__init__.py +0 -0
  138. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/connect/select/tutorial001_py310.py +0 -0
  139. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/connect/select/tutorial002_py310.py +0 -0
  140. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/connect/select/tutorial003_py310.py +0 -0
  141. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/connect/select/tutorial004_py310.py +0 -0
  142. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/connect/select/tutorial005_py310.py +0 -0
  143. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/connect/update/__init__.py +0 -0
  144. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/connect/update/tutorial001_py310.py +0 -0
  145. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/create_db_and_table/__init__.py +0 -0
  146. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/create_db_and_table/annotations/en/tutorial003.md +0 -0
  147. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/create_db_and_table/tutorial001_py310.py +0 -0
  148. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/create_db_and_table/tutorial002_py310.py +0 -0
  149. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/create_db_and_table/tutorial003_py310.py +0 -0
  150. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/delete/__init__.py +0 -0
  151. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/delete/annotations/en/tutorial002.md +0 -0
  152. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/delete/tutorial001_py310.py +0 -0
  153. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/delete/tutorial002_py310.py +0 -0
  154. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/__init__.py +0 -0
  155. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/__init__.py +0 -0
  156. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/__init__.py +0 -0
  157. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/annotations/en/test_main_001.md +0 -0
  158. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/annotations/en/test_main_002.md +0 -0
  159. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/annotations/en/test_main_003.md +0 -0
  160. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/annotations/en/test_main_004.md +0 -0
  161. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/annotations/en/test_main_005.md +0 -0
  162. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/annotations/en/test_main_006.md +0 -0
  163. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/main.py +0 -0
  164. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_extra_coverage.py +0 -0
  165. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main.py +0 -0
  166. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main_001.py +0 -0
  167. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main_002.py +0 -0
  168. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main_003.py +0 -0
  169. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main_004.py +0 -0
  170. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main_005.py +0 -0
  171. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main_006.py +0 -0
  172. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/delete/__init__.py +0 -0
  173. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/delete/tutorial001_py310.py +0 -0
  174. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/limit_and_offset/__init__.py +0 -0
  175. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/limit_and_offset/tutorial001_py310.py +0 -0
  176. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/multiple_models/__init__.py +0 -0
  177. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/multiple_models/tutorial001_py310.py +0 -0
  178. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/multiple_models/tutorial002_py310.py +0 -0
  179. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/read_one/__init__.py +0 -0
  180. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/read_one/tutorial001_py310.py +0 -0
  181. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/relationships/__init__.py +0 -0
  182. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/relationships/tutorial001_py310.py +0 -0
  183. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/response_model/__init__.py +0 -0
  184. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/response_model/tutorial001_py310.py +0 -0
  185. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/session_with_dependency/__init__.py +0 -0
  186. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/session_with_dependency/tutorial001_py310.py +0 -0
  187. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/simple_hero_api/__init__.py +0 -0
  188. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/simple_hero_api/tutorial001_py310.py +0 -0
  189. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/teams/__init__.py +0 -0
  190. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/teams/tutorial001_py310.py +0 -0
  191. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/update/__init__.py +0 -0
  192. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/update/tutorial001_py310.py +0 -0
  193. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/fastapi/update/tutorial002_py310.py +0 -0
  194. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/indexes/__init__.py +0 -0
  195. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/indexes/tutorial001_py310.py +0 -0
  196. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/indexes/tutorial002_py310.py +0 -0
  197. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/insert/__init__.py +0 -0
  198. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/insert/annotations/en/tutorial003.md +0 -0
  199. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/insert/tutorial001_py310.py +0 -0
  200. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/insert/tutorial002_py310.py +0 -0
  201. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/insert/tutorial003_py310.py +0 -0
  202. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/many_to_many/__init__.py +0 -0
  203. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/many_to_many/tutorial001_py310.py +0 -0
  204. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/many_to_many/tutorial002_py310.py +0 -0
  205. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/many_to_many/tutorial003_py310.py +0 -0
  206. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/offset_and_limit/__init__.py +0 -0
  207. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/offset_and_limit/tutorial001_py310.py +0 -0
  208. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/offset_and_limit/tutorial002_py310.py +0 -0
  209. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/offset_and_limit/tutorial003_py310.py +0 -0
  210. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/offset_and_limit/tutorial004_py310.py +0 -0
  211. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/one/__init__.py +0 -0
  212. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/one/tutorial001_py310.py +0 -0
  213. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/one/tutorial002_py310.py +0 -0
  214. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/one/tutorial003_py310.py +0 -0
  215. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/one/tutorial004_py310.py +0 -0
  216. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/one/tutorial005_py310.py +0 -0
  217. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/one/tutorial006_py310.py +0 -0
  218. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/one/tutorial007_py310.py +0 -0
  219. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/one/tutorial008_py310.py +0 -0
  220. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/one/tutorial009_py310.py +0 -0
  221. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/__init__.py +0 -0
  222. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/back_populates/__init__.py +0 -0
  223. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/back_populates/tutorial001_py310.py +0 -0
  224. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/back_populates/tutorial002_py310.py +0 -0
  225. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/back_populates/tutorial003_py310.py +0 -0
  226. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/__init__.py +0 -0
  227. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial001_py310.py +0 -0
  228. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial002_py310.py +0 -0
  229. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/create_and_update_relationships/__init__.py +0 -0
  230. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/create_and_update_relationships/tutorial001_py310.py +0 -0
  231. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/define_relationship_attributes/__init__.py +0 -0
  232. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/define_relationship_attributes/tutorial001_py310.py +0 -0
  233. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/read_relationships/__init__.py +0 -0
  234. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/read_relationships/tutorial001_py310.py +0 -0
  235. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/relationship_attributes/read_relationships/tutorial002_py310.py +0 -0
  236. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/select/__init__.py +0 -0
  237. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/select/annotations/en/tutorial002.md +0 -0
  238. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/select/tutorial001_py310.py +0 -0
  239. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/select/tutorial002_py310.py +0 -0
  240. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/select/tutorial003_py310.py +0 -0
  241. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/select/tutorial004_py310.py +0 -0
  242. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/update/__init__.py +0 -0
  243. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/update/annotations/en/tutorial002.md +0 -0
  244. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/update/annotations/en/tutorial004.md +0 -0
  245. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/update/tutorial001_py310.py +0 -0
  246. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/update/tutorial002_py310.py +0 -0
  247. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/update/tutorial003_py310.py +0 -0
  248. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/update/tutorial004_py310.py +0 -0
  249. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/where/__init__.py +0 -0
  250. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial001_py310.py +0 -0
  251. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial002_py310.py +0 -0
  252. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial003_py310.py +0 -0
  253. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial004_py310.py +0 -0
  254. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial005_py310.py +0 -0
  255. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial006_py310.py +0 -0
  256. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial006b_py310.py +0 -0
  257. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial007_py310.py +0 -0
  258. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial008_py310.py +0 -0
  259. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial009_py310.py +0 -0
  260. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/docs_src/tutorial/where/tutorial011_py310.py +0 -0
  261. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/scripts/add_latest_release_date.py +0 -0
  262. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/scripts/deploy_docs_status.py +0 -0
  263. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/scripts/docs.py +0 -0
  264. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/scripts/format.sh +0 -0
  265. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/scripts/generate_select.py +0 -0
  266. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/scripts/lint.sh +0 -0
  267. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/scripts/prepare_release.py +0 -0
  268. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/scripts/test.sh +0 -0
  269. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/.agents/skills/sqlmodel/SKILL.md +0 -0
  270. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/_compat.py +0 -0
  271. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/default.py +0 -0
  272. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/ext/__init__.py +0 -0
  273. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/ext/asyncio/__init__.py +0 -0
  274. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/ext/asyncio/session.py +0 -0
  275. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/main.py +0 -0
  276. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/orm/__init__.py +0 -0
  277. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/orm/session.py +0 -0
  278. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/pool/__init__.py +0 -0
  279. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/py.typed +0 -0
  280. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/sql/__init__.py +0 -0
  281. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/sql/_expression_select_cls.py +0 -0
  282. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/sql/_expression_select_gen.py +0 -0
  283. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/sql/_expression_select_gen.py.jinja2 +0 -0
  284. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/sql/base.py +0 -0
  285. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/sqlmodel/sql/expression.py +0 -0
  286. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/__init__.py +0 -0
  287. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_advanced/__init__.py +0 -0
  288. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_advanced/test_datetime/__init__.py +0 -0
  289. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_advanced/test_datetime/test_tutorial002.py +0 -0
  290. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_advanced/test_datetime/test_tutorial003.py +0 -0
  291. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_advanced/test_datetime/test_tutorial004.py +0 -0
  292. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_advanced/test_datetime/test_tutorial005.py +0 -0
  293. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_advanced/test_decimal/__init__.py +0 -0
  294. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_advanced/test_uuid/__init__.py +0 -0
  295. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_aliases.py +0 -0
  296. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_dataclass_transform.py +0 -0
  297. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_default.py +0 -0
  298. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_deprecations.py +0 -0
  299. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_enums.py +0 -0
  300. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_enums_models.py +0 -0
  301. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_field_sa_column.py +0 -0
  302. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_field_sa_relationship.py +0 -0
  303. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_field_sa_type.py +0 -0
  304. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_fields_set.py +0 -0
  305. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_missing_type.py +0 -0
  306. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_ondelete_raises.py +0 -0
  307. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_prepare_release.py +0 -0
  308. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_pydantic/__init__.py +0 -0
  309. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_pydantic/test_field.py +0 -0
  310. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_pydantic/test_model_dump.py +0 -0
  311. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_select_gen.py +0 -0
  312. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_sqlalchemy_type_errors.py +0 -0
  313. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/__init__.py +0 -0
  314. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_automatic_id_none_refresh/__init__.py +0 -0
  315. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_code_structure/__init__.py +0 -0
  316. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/__init__.py +0 -0
  317. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_create_connected_tables/__init__.py +0 -0
  318. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_delete/__init__.py +0 -0
  319. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_insert/__init__.py +0 -0
  320. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_select/__init__.py +0 -0
  321. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_connect/test_update/__init__.py +0 -0
  322. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_create_db_and_table/__init__.py +0 -0
  323. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_create_db_and_table/test_tutorial001.py +0 -0
  324. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_delete/__init__.py +0 -0
  325. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/__init__.py +0 -0
  326. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_app_testing/__init__.py +0 -0
  327. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests001.py +0 -0
  328. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests002.py +0 -0
  329. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests003.py +0 -0
  330. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests004.py +0 -0
  331. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests005.py +0 -0
  332. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests006.py +0 -0
  333. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests_main.py +0 -0
  334. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_delete/__init__.py +0 -0
  335. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_limit_and_offset/__init__.py +0 -0
  336. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_multiple_models/__init__.py +0 -0
  337. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_read_one/__init__.py +0 -0
  338. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_relationships/__init__.py +0 -0
  339. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_response_model/__init__.py +0 -0
  340. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_session_with_dependency/__init__.py +0 -0
  341. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_simple_hero_api/__init__.py +0 -0
  342. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_teams/__init__.py +0 -0
  343. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_fastapi/test_update/__init__.py +0 -0
  344. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_indexes/__init__.py +0 -0
  345. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_insert/__init__.py +0 -0
  346. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_limit_and_offset/__init__.py +0 -0
  347. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_many_to_many/__init__.py +0 -0
  348. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_one/__init__.py +0 -0
  349. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/__init__.py +0 -0
  350. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_back_populates/__init__.py +0 -0
  351. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_create_and_update_relationships/__init__.py +0 -0
  352. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_define_relationship_attributes/__init__.py +0 -0
  353. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/__init__.py +0 -0
  354. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_relationship_attributes/test_read_relationships/__init__.py +0 -0
  355. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_select/__init__.py +0 -0
  356. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_update/__init__.py +0 -0
  357. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_tutorial/test_where/__init__.py +0 -0
  358. {sqlmodel-0.0.45 → sqlmodel-0.0.47}/tests/test_update.py +0 -0
  359. {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.45
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
- with engine.connect() as connection:
33
- connection.execute(text("PRAGMA foreign_keys=ON")) # for SQLite only
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
- with engine.connect() as connection:
33
- connection.execute(text("PRAGMA foreign_keys=ON")) # for SQLite only
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
- with engine.connect() as connection:
33
- connection.execute(text("PRAGMA foreign_keys=ON")) # for SQLite only
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.45"
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,4 +1,4 @@
1
- __version__ = "0.0.45"
1
+ __version__ = "0.0.47"
2
2
 
3
3
  # Re-export from Pydantic
4
4
  from pydantic import Discriminator as Discriminator
@@ -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 == "mysql":
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 sqlmodel import SQLModel
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 sqlmodel import SQLModel, create_engine
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.sqlite_url = "sqlite://"
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": 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 sqlmodel import create_engine
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.sqlite_url = "sqlite://"
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 sqlmodel import create_engine
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.sqlite_url = "sqlite://"
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 sqlmodel import create_engine
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.sqlite_url = "sqlite://"
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 sqlmodel import Field, Session, SQLModel, create_engine, select
3
+ from sqlalchemy import Engine
4
+ from sqlmodel import Field, Session, SQLModel, select
4
5
 
5
6
 
6
- def test_annotated_optional_types(clear_sqlmodel) -> None:
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 = create_engine("sqlite:///:memory:")
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 test_sqlite_datetime_round_trip() -> None:
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 = create_engine("sqlite://")
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(offset: tzinfo | None, operation: str) -> None:
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 = create_engine("sqlite://")
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 test_explicit_datetime_bypasses_utc_processing(timezone_enabled: bool) -> None:
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, create_engine
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(clear_sqlmodel, caplog) -> None:
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 = create_engine("sqlite://", echo=True)
20
+ engine = database_engine
21
21
  SQLModel.metadata.create_all(engine)
22
- create_table_log = [
23
- message for message in caplog.messages if "CREATE TABLE hero" in message
24
- ][0]
25
- assert "FOREIGN KEY(team_id) REFERENCES team (id)" in create_table_log
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(clear_sqlmodel, caplog) -> None:
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 = create_engine("sqlite://", echo=True)
36
+ engine = database_engine
36
37
  SQLModel.metadata.create_all(engine)
37
- create_table_log = [
38
- message for message in caplog.messages if "CREATE TABLE item" in message
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 sqlmodel import Field, Session, SQLModel, create_engine, select
5
+ from sqlalchemy import Engine
6
+ from sqlmodel import Field, Session, SQLModel, select
6
7
 
7
8
 
8
- def test_model_with_future_annotations(clear_sqlmodel):
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 = create_engine("sqlite://")
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(clear_sqlmodel):
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 = create_engine("sqlite://")
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 sqlmodel import Field, Session, SQLModel, create_engine, select
3
+ from sqlalchemy import Engine
4
+ from sqlmodel import Field, Session, SQLModel, select
4
5
 
5
6
 
6
- def test_allow_instantiation_without_arguments(clear_sqlmodel):
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 = create_engine("sqlite:///:memory:")
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, create_engine, select
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(clear_sqlmodel):
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 = create_engine("sqlite://")
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(clear_sqlmodel):
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 = create_engine("sqlite://")
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
- clear_sqlmodel,
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 = create_engine("sqlite://")
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(clear_sqlmodel):
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 = create_engine("sqlite://", echo=True)
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(clear_sqlmodel):
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 = create_engine("sqlite://")
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(clear_sqlmodel):
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 = create_engine("sqlite://")
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(clear_sqlmodel):
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 = create_engine("sqlite://")
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]