SQLAlchemy 2.0.34__py3-none-any.whl → 2.0.36__py3-none-any.whl

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 (48) hide show
  1. {SQLAlchemy-2.0.34.dist-info → SQLAlchemy-2.0.36.dist-info}/METADATA +3 -2
  2. {SQLAlchemy-2.0.34.dist-info → SQLAlchemy-2.0.36.dist-info}/RECORD +48 -48
  3. {SQLAlchemy-2.0.34.dist-info → SQLAlchemy-2.0.36.dist-info}/WHEEL +1 -1
  4. sqlalchemy/__init__.py +1 -1
  5. sqlalchemy/dialects/mssql/base.py +0 -1
  6. sqlalchemy/dialects/mysql/base.py +67 -22
  7. sqlalchemy/dialects/mysql/mariadbconnector.py +2 -0
  8. sqlalchemy/dialects/mysql/mysqlconnector.py +1 -0
  9. sqlalchemy/dialects/mysql/mysqldb.py +1 -1
  10. sqlalchemy/dialects/mysql/provision.py +3 -0
  11. sqlalchemy/dialects/oracle/base.py +2 -3
  12. sqlalchemy/dialects/postgresql/asyncpg.py +0 -4
  13. sqlalchemy/dialects/postgresql/base.py +2 -1
  14. sqlalchemy/dialects/postgresql/json.py +17 -9
  15. sqlalchemy/dialects/postgresql/psycopg.py +0 -4
  16. sqlalchemy/dialects/sqlite/base.py +14 -63
  17. sqlalchemy/engine/result.py +8 -8
  18. sqlalchemy/ext/associationproxy.py +9 -1
  19. sqlalchemy/ext/asyncio/result.py +8 -8
  20. sqlalchemy/ext/asyncio/session.py +1 -1
  21. sqlalchemy/ext/automap.py +1 -1
  22. sqlalchemy/ext/compiler.py +23 -8
  23. sqlalchemy/orm/_orm_constructors.py +69 -10
  24. sqlalchemy/orm/base.py +2 -0
  25. sqlalchemy/orm/bulk_persistence.py +85 -45
  26. sqlalchemy/orm/context.py +14 -1
  27. sqlalchemy/orm/decl_base.py +10 -0
  28. sqlalchemy/orm/evaluator.py +11 -0
  29. sqlalchemy/orm/events.py +3 -1
  30. sqlalchemy/orm/interfaces.py +5 -0
  31. sqlalchemy/orm/mapper.py +12 -1
  32. sqlalchemy/orm/query.py +2 -0
  33. sqlalchemy/orm/strategies.py +184 -90
  34. sqlalchemy/orm/strategy_options.py +1 -1
  35. sqlalchemy/orm/util.py +2 -1
  36. sqlalchemy/sql/_elements_constructors.py +3 -0
  37. sqlalchemy/sql/coercions.py +7 -7
  38. sqlalchemy/sql/ddl.py +5 -5
  39. sqlalchemy/sql/selectable.py +1 -1
  40. sqlalchemy/sql/sqltypes.py +6 -0
  41. sqlalchemy/sql/type_api.py +28 -7
  42. sqlalchemy/testing/requirements.py +5 -0
  43. sqlalchemy/testing/suite/test_reflection.py +137 -40
  44. sqlalchemy/util/__init__.py +1 -0
  45. sqlalchemy/util/compat.py +1 -0
  46. sqlalchemy/util/typing.py +8 -1
  47. {SQLAlchemy-2.0.34.dist-info → SQLAlchemy-2.0.36.dist-info}/LICENSE +0 -0
  48. {SQLAlchemy-2.0.34.dist-info → SQLAlchemy-2.0.36.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: SQLAlchemy
3
- Version: 2.0.34
3
+ Version: 2.0.36
4
4
  Summary: Database Abstraction Library
5
5
  Home-page: https://www.sqlalchemy.org
6
6
  Author: Mike Bayer
@@ -20,6 +20,7 @@ Classifier: Programming Language :: Python :: 3.9
20
20
  Classifier: Programming Language :: Python :: 3.10
21
21
  Classifier: Programming Language :: Python :: 3.11
22
22
  Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Programming Language :: Python :: 3.13
23
24
  Classifier: Programming Language :: Python :: Implementation :: CPython
24
25
  Classifier: Programming Language :: Python :: Implementation :: PyPy
25
26
  Classifier: Topic :: Database :: Front-Ends
@@ -45,7 +46,7 @@ Provides-Extra: asyncmy
45
46
  Requires-Dist: greenlet !=0.4.17 ; extra == 'asyncmy'
46
47
  Requires-Dist: asyncmy !=0.2.4,!=0.2.6,>=0.2.3 ; extra == 'asyncmy'
47
48
  Provides-Extra: mariadb_connector
48
- Requires-Dist: mariadb !=1.1.2,!=1.1.5,>=1.0.1 ; extra == 'mariadb_connector'
49
+ Requires-Dist: mariadb !=1.1.10,!=1.1.2,!=1.1.5,>=1.0.1 ; extra == 'mariadb_connector'
49
50
  Provides-Extra: mssql
50
51
  Requires-Dist: pyodbc ; extra == 'mssql'
51
52
  Provides-Extra: mssql_pymssql
@@ -1,4 +1,4 @@
1
- sqlalchemy/__init__.py,sha256=kW5kNSOI0cHm2Ioc_-ahxqHWmCDAWb_iqZZJsMYrKMU,13033
1
+ sqlalchemy/__init__.py,sha256=J2PsdiJiNW93Etxk6YN8o_C3TcpR1_DckU71r4LBcGE,13033
2
2
  sqlalchemy/events.py,sha256=k-ZD38aSPD29LYhED7CBqttp5MDVVx_YSaWC2-cu9ec,525
3
3
  sqlalchemy/exc.py,sha256=M_8-O1hd8i6gbyx-TapV400p_Lxq2QqTGMXUAO-YgCc,23976
4
4
  sqlalchemy/inspection.py,sha256=MF-LE358wZDUEl1IH8-Uwt2HI65EsQpQW5o5udHkZwA,5063
@@ -22,7 +22,7 @@ sqlalchemy/dialects/_typing.py,sha256=hyv0nKucX2gI8ispB1IsvaUgrEPn9zEcq9hS7kfstE
22
22
  sqlalchemy/dialects/type_migration_guidelines.txt,sha256=-uHNdmYFGB7bzUNT6i8M5nb4j6j9YUKAtW4lcBZqsMg,8239
23
23
  sqlalchemy/dialects/mssql/__init__.py,sha256=r5t8wFRNtBQoiUWh0WfIEWzXZW6f3D0uDt6NZTW_7Cc,1880
24
24
  sqlalchemy/dialects/mssql/aioodbc.py,sha256=UQd9ecSMIML713TDnLAviuBVJle7P7i1FtqGZZePk2Y,2022
25
- sqlalchemy/dialects/mssql/base.py,sha256=TQekFOsor8Rc-cnDPmbq_JLQekKrHPtUdBdNsCYFw7w,132447
25
+ sqlalchemy/dialects/mssql/base.py,sha256=msl_N_a_z8ali7Nthx55AGoV7b5wakCWvWu560BvH9o,132423
26
26
  sqlalchemy/dialects/mssql/information_schema.py,sha256=HswjDc6y0mPXCf_x6VyylHlBdBa4PSY6Evxmmlch700,8084
27
27
  sqlalchemy/dialects/mssql/json.py,sha256=evUACW2O62TAPq8B7QIPagz7jfc664ql9ms68JqiYzg,4816
28
28
  sqlalchemy/dialects/mssql/provision.py,sha256=ZAtt6Div9NLIngMs8kyloxfphw0KDNMsnRCAVd7-esE,5593
@@ -31,24 +31,24 @@ sqlalchemy/dialects/mssql/pyodbc.py,sha256=vwM-vBlmRwrqxOc73P0sFOrBSwn24wzc5IkEO
31
31
  sqlalchemy/dialects/mysql/__init__.py,sha256=bxbi4hkysUK2OOVvr1F49akUj1cky27kKb07tgFzI9U,2153
32
32
  sqlalchemy/dialects/mysql/aiomysql.py,sha256=-oMZnCqNsSki8mlQRTWIwiQPT1OVdZIuANkb90q8LAs,9999
33
33
  sqlalchemy/dialects/mysql/asyncmy.py,sha256=YpuuOh8VknEeqHqUXQGfQ3jhfO3Xb-vZv78Jq5cscJ0,10067
34
- sqlalchemy/dialects/mysql/base.py,sha256=8shrZRSnVwDXtl6ybaO6cvul_RZ34zEWqvpYW5sNfOQ,120986
34
+ sqlalchemy/dialects/mysql/base.py,sha256=giGlZNGrKsNMoSkbzY0PGgfamKjA9rOkSq1o5vKvno4,122755
35
35
  sqlalchemy/dialects/mysql/cymysql.py,sha256=eXT1ry0w_qRxjiO24M980c-8PZ9qSsbhqBHntjEiKB0,2300
36
36
  sqlalchemy/dialects/mysql/dml.py,sha256=HXJMAvimJsqvhj3UZO4vW_6LkF5RqaKbHvklAjor7yU,7645
37
37
  sqlalchemy/dialects/mysql/enumerated.py,sha256=ipEPPQqoXfFwcywNdcLlZCEzHBtnitHRah1Gn6nItcg,8448
38
38
  sqlalchemy/dialects/mysql/expression.py,sha256=lsmQCHKwfPezUnt27d2kR6ohk4IRFCA64KBS16kx5dc,4097
39
39
  sqlalchemy/dialects/mysql/json.py,sha256=l6MEZ0qp8FgiRrIQvOMhyEJq0q6OqiEnvDTx5Cbt9uQ,2269
40
40
  sqlalchemy/dialects/mysql/mariadb.py,sha256=kTfBLioLKk4JFFst4TY_iWqPtnvvQXFHknLfm89H2N8,853
41
- sqlalchemy/dialects/mysql/mariadbconnector.py,sha256=sRlzRFU5E1512aFyEhmmL1ffeU1u5meaLqtRYTcrH7Y,8568
42
- sqlalchemy/dialects/mysql/mysqlconnector.py,sha256=qiQdfLPze3QHuASAZ9iqRzD0hDW8FbKoQnfAEQCF7tM,5675
43
- sqlalchemy/dialects/mysql/mysqldb.py,sha256=zPHKMQbHu8bFuD7YvOJewn2axQbfwA93NZoeX3bbbiQ,9502
44
- sqlalchemy/dialects/mysql/provision.py,sha256=4oGkClQ8jC3YLPF54sB4kCjFc8HRTwf5zl5zftAAXGo,3474
41
+ sqlalchemy/dialects/mysql/mariadbconnector.py,sha256=_S1aV93kyP52Nvj7HR9weThML4oUvSLsLqiVFdoLR2o,8623
42
+ sqlalchemy/dialects/mysql/mysqlconnector.py,sha256=oq3mtsNOMldUjs32JbJG2u3Hy3DObyVzUUMYfOkwkHg,5729
43
+ sqlalchemy/dialects/mysql/mysqldb.py,sha256=qUBbA6STeYGozutyTxHCo5p1W3p59QFFS2FwCgPrjBA,9503
44
+ sqlalchemy/dialects/mysql/provision.py,sha256=Jnk8UO9_Apd2odR2IQFLrscCfAmYxuBKcB8giS3bBog,3575
45
45
  sqlalchemy/dialects/mysql/pymysql.py,sha256=GUnSHd2M2uKjmN46Hheymtm26g7phEgwYOXrX0zLY8M,4083
46
46
  sqlalchemy/dialects/mysql/pyodbc.py,sha256=072crI4qVyPhajYvHnsfFeSrNjLFVPIjBQKo5uyz5yk,4297
47
47
  sqlalchemy/dialects/mysql/reflection.py,sha256=3u34YwT1JJh3uThGZJZ3FKdnUcT7v08QB-tAl1r7VRk,22834
48
48
  sqlalchemy/dialects/mysql/reserved_words.py,sha256=ucKX2p2c3UnMq2ayZuOHuf73eXhu7SKsOsTlIN1Q83I,9258
49
49
  sqlalchemy/dialects/mysql/types.py,sha256=L5cTCsMT1pTedszNEM3jSxFNZEMcHQLprYCZ0vmfsnA,24343
50
50
  sqlalchemy/dialects/oracle/__init__.py,sha256=p4-2gw7TT0bX_MoJXTGD4i8WHctYsK9kCRbkpzykBrc,1493
51
- sqlalchemy/dialects/oracle/base.py,sha256=cav9QxSLT75-JXhhFSneYT_y3coF6TmFkBa5fqQMrRI,119615
51
+ sqlalchemy/dialects/oracle/base.py,sha256=zLMZedrr6j1LvJz4qYnoSjikI5RZY92YFeQHiZ_YvW0,119676
52
52
  sqlalchemy/dialects/oracle/cx_oracle.py,sha256=q8Nyj15UZCE2TWOmxuWp5ZsxiCiGMzqfd_9UkmjIja0,55235
53
53
  sqlalchemy/dialects/oracle/dictionary.py,sha256=7WMrbPkqo8ZdGjaEZyQr-5f2pajSOF1OTGb8P97z8-g,19519
54
54
  sqlalchemy/dialects/oracle/oracledb.py,sha256=fZRKGqNIwW9LG4i8yDOXABrucbfzn_yC86Od-BJ3PcM,13619
@@ -57,25 +57,25 @@ sqlalchemy/dialects/oracle/types.py,sha256=QK3hJvWzKnnCe3oD3rItwEEIwcoBze8qGg7VF
57
57
  sqlalchemy/dialects/postgresql/__init__.py,sha256=wwnNAq4wDQzrlPRzDNB06ayuq3L2HNO99nzeEvq-YcU,3892
58
58
  sqlalchemy/dialects/postgresql/_psycopg_common.py,sha256=7TudtgsPiSB8O5kX8W8KxcNYR8t5h_UHb86b_ChL0P8,5696
59
59
  sqlalchemy/dialects/postgresql/array.py,sha256=bWcame7ntmI_Kx6gmBX0-chwADFdLHeCvaDQ4iX8id8,13734
60
- sqlalchemy/dialects/postgresql/asyncpg.py,sha256=se1HXkikKQFcR2D-15jS6iKIaQs-M8Y8ke99ih0Y4NM,41132
61
- sqlalchemy/dialects/postgresql/base.py,sha256=ed49Ode09deJF3jXr8V5sSHTwVoFVq0dlvNdP3mJaBQ,178989
60
+ sqlalchemy/dialects/postgresql/asyncpg.py,sha256=9P0Itn9eeSBu67kGSsHuzx8xd4YYwRKdiZ5m7bF5onU,41074
61
+ sqlalchemy/dialects/postgresql/base.py,sha256=dGPsaV3Esw6-AwE3QcgHF0Fray3Yw5-gLLgCvgdxvS0,179083
62
62
  sqlalchemy/dialects/postgresql/dml.py,sha256=Pc69Le6qzmUHHb1FT5zeUSD31dWm6SBgdCAGW89cs3s,11212
63
63
  sqlalchemy/dialects/postgresql/ext.py,sha256=1bZ--iNh2O9ym7l2gXZX48yP3yMO4dqb9RpYro2Mj2Q,16262
64
64
  sqlalchemy/dialects/postgresql/hstore.py,sha256=otAx-RTDfpi_tcXkMuQV0JOIXtYgevgnsikLKKOkI6U,11541
65
- sqlalchemy/dialects/postgresql/json.py,sha256=9-ZvkLVMfQNSz0aHGml_B8sNg3gVq3-gxLnb5BO7Pog,11217
65
+ sqlalchemy/dialects/postgresql/json.py,sha256=53rQWon9cUXd1yCjIvUpJjWwNyRSy3U7Kz0HV70ftrc,11618
66
66
  sqlalchemy/dialects/postgresql/named_types.py,sha256=3IV1ufo7zJjKmX4VtGDEnoXE6xEqLJAtGG82IiqHXwY,17594
67
67
  sqlalchemy/dialects/postgresql/operators.py,sha256=NsAaWun_tL3d_be0fs9YL6T4LPKK6crnmFxxIJHgyeY,2808
68
68
  sqlalchemy/dialects/postgresql/pg8000.py,sha256=3yoekiWSF-xnaWMqG76XrYPMqerg-42TdmfsW_ivK9E,18640
69
69
  sqlalchemy/dialects/postgresql/pg_catalog.py,sha256=hY3NXEUHxTWD4umhd2aowNu3laC-61Q_qQ_pReyXTUM,9254
70
70
  sqlalchemy/dialects/postgresql/provision.py,sha256=t6TZj0XaWG9zrpCjNr0oJRjAC_WQzaNdp3kaKJIbS8I,5770
71
- sqlalchemy/dialects/postgresql/psycopg.py,sha256=ACkfuT87vUJEW4kJyUqDYTwlnl5u0FZFlDcvLzxNzFQ,23226
71
+ sqlalchemy/dialects/postgresql/psycopg.py,sha256=Uwf45f9fInOtaExiEdwiP9xzRo7hw0XyZTkRtgdom44,23168
72
72
  sqlalchemy/dialects/postgresql/psycopg2.py,sha256=kwEnflz5bAqJcuO_20eYiCtha_a4m_tg5_lppdDnaeU,31998
73
73
  sqlalchemy/dialects/postgresql/psycopg2cffi.py,sha256=M7wAYSL6Pvt-4nbfacAHGyyw4XMKJ_bQZ1tc1pBtIdg,1756
74
74
  sqlalchemy/dialects/postgresql/ranges.py,sha256=6CgV7qkxEMJ9AQsiibo_XBLJYzGh-2ZxpG83sRaesVY,32949
75
75
  sqlalchemy/dialects/postgresql/types.py,sha256=Jfxqw9JaKNOq29JRWBublywgb3lLMyzx8YZI7CXpS2s,7300
76
76
  sqlalchemy/dialects/sqlite/__init__.py,sha256=lp9DIggNn349M-7IYhUA8et8--e8FRExWD2V_r1LJk4,1182
77
77
  sqlalchemy/dialects/sqlite/aiosqlite.py,sha256=g3qGV6jmiXabWyb3282g_Nmxtj1jThxGSe9C9yalb-U,12345
78
- sqlalchemy/dialects/sqlite/base.py,sha256=i1LolkwQLI86l_YwEpiIfN5Lh469H1mairKdmTxa9k4,99832
78
+ sqlalchemy/dialects/sqlite/base.py,sha256=LcnW6hzxqTtPlDBOInHumvuDt8a31THA5Jnm4vFvdFI,97811
79
79
  sqlalchemy/dialects/sqlite/dml.py,sha256=9GE55WvwoktKy2fHeT-Wbc9xPHgsbh5oBfd_fckMH5Q,8443
80
80
  sqlalchemy/dialects/sqlite/json.py,sha256=Eoplbb_4dYlfrtmQaI8Xddd2suAIHA-IdbDQYM-LIhs,2777
81
81
  sqlalchemy/dialects/sqlite/provision.py,sha256=UCpmwxf4IWlrpb2eLHGbPTpCFVbdI_KAh2mKtjiLYao,5632
@@ -95,7 +95,7 @@ sqlalchemy/engine/interfaces.py,sha256=fcVHOmnMo7JZLHzgSKoK3QsdVHH7kJ_AmrDvwW9Ka
95
95
  sqlalchemy/engine/mock.py,sha256=yvpxgFmRw5G4QsHeF-ZwQGHKES-HqQOucTxFtN1uzdk,4179
96
96
  sqlalchemy/engine/processors.py,sha256=XyfINKbo-2fjN-mW55YybvFyQMOil50_kVqsunahkNs,2379
97
97
  sqlalchemy/engine/reflection.py,sha256=gwGs8y7x6py5z-ZWx3hQqQrwpHepMCTJyQcFwWJjPlw,75364
98
- sqlalchemy/engine/result.py,sha256=j6BI4Wj2bziQNQG5OlG_Cm4KcNWY9AoYvTXVlJUU-D8,77603
98
+ sqlalchemy/engine/result.py,sha256=NZEskTMAcDzK-vjE96Fw8VvBL58s5Y6rt9vXcmZdM4w,77651
99
99
  sqlalchemy/engine/row.py,sha256=9AAQo9zYDL88GcZ3bjcQTwMT-YIcuGTSMAyTfmBJ_yM,12032
100
100
  sqlalchemy/engine/strategies.py,sha256=DqFSWaXJPL-29Omot9O0aOcuGL8KmCGyOvnPGDkAJoE,442
101
101
  sqlalchemy/engine/url.py,sha256=8eWkUaIUyDExOcJ2D4xJXRcn4OY1GQJ3Q2duSX6UGAg,30784
@@ -107,10 +107,10 @@ sqlalchemy/event/base.py,sha256=270OShTD17-bSFUFnPtKdVnB0NFJZ2AouYPo1wT0aJw,1512
107
107
  sqlalchemy/event/legacy.py,sha256=teMPs00fO-4g8a_z2omcVKkYce5wj_1uvJO2n2MIeuo,8227
108
108
  sqlalchemy/event/registry.py,sha256=nfTSSyhjZZXc5wseWB4sXn-YibSc0LKX8mg17XlWmAo,10835
109
109
  sqlalchemy/ext/__init__.py,sha256=S1fGKAbycnQDV01gs-JWGaFQ9GCD4QHwKcU2wnugg_o,322
110
- sqlalchemy/ext/associationproxy.py,sha256=5O5ANHARO8jytvqBQmOu-QjNVE4Hh3tfYquqKAj5ajs,65771
111
- sqlalchemy/ext/automap.py,sha256=cMs3mMXZBbfQXahxHbT3-6h5uMM--GZIcdtwhRrZoio,61589
110
+ sqlalchemy/ext/associationproxy.py,sha256=ZGc_ssGf7FC6eKrja1iTvnWEKLkFZQA8CiVAjR8iVRw,66062
111
+ sqlalchemy/ext/automap.py,sha256=r0mUSyogNyqdBL4m9AA1NXbLiTLQmtvyQymsssNEipo,61581
112
112
  sqlalchemy/ext/baked.py,sha256=H6T1il7GY84BhzPFj49UECSpZh_eBuiHomA-QIsYOYQ,17807
113
- sqlalchemy/ext/compiler.py,sha256=ONPoxoKD2yUS9R2-oOhmPsA7efm-Bs0BXo7HE1dGlsU,20391
113
+ sqlalchemy/ext/compiler.py,sha256=6X6sZCAo9v-PQfLbwBSYQUK0-XH2xTE5Jm0Zg6Ka6eM,20877
114
114
  sqlalchemy/ext/horizontal_shard.py,sha256=wuwAPnHymln0unSBnyx-cpX0AfESKSsypaSQTYCvzDk,16750
115
115
  sqlalchemy/ext/hybrid.py,sha256=IYkCaPZ29gm2cPKPg0cWMkLCEqMykD8-JJTvgacGbmc,52458
116
116
  sqlalchemy/ext/indexable.py,sha256=UkTelbydKCdKelzbv3HWFFavoET9WocKaGRPGEOVfN8,11032
@@ -122,9 +122,9 @@ sqlalchemy/ext/asyncio/__init__.py,sha256=1OqSxEyIUn7RWLGyO12F-jAUIvk1I6DXlVy80-
122
122
  sqlalchemy/ext/asyncio/base.py,sha256=fl7wxZD9KjgFiCtG3WXrYjHEvanamcsodCqq9pH9lOk,8905
123
123
  sqlalchemy/ext/asyncio/engine.py,sha256=S_IRWX4QAjj2veLSu4Y3gKBIXkKQt7_2StJAK2_KUDY,48190
124
124
  sqlalchemy/ext/asyncio/exc.py,sha256=8sII7VMXzs2TrhizhFQMzSfcroRtiesq8o3UwLfXSgQ,639
125
- sqlalchemy/ext/asyncio/result.py,sha256=ID2eh-NHW-lnNFTxbKhje8fr-tnsucUsiw_jcpGcSPc,30409
125
+ sqlalchemy/ext/asyncio/result.py,sha256=3rbVIY_wySi50JwaK3Kf2qa3c5Fc8W84FtUpt-9i9Vk,30477
126
126
  sqlalchemy/ext/asyncio/scoping.py,sha256=UxHAFxtWKqA7TEozyN2h7MJyzSspTCrS-1SlgQLTExo,52608
127
- sqlalchemy/ext/asyncio/session.py,sha256=mkFFC1C2mPuopz3BwkfSVTlp3vuIDc8hxiQx5ky5rvc,63103
127
+ sqlalchemy/ext/asyncio/session.py,sha256=QpXnqspwYnT28znD1EdpUIaVjQOO1BirtS0BJeBxeZk,63087
128
128
  sqlalchemy/ext/declarative/__init__.py,sha256=20psLdFQbbOWfpdXHZ0CTY6I1k4UqXvKemNVu1LvPOI,1818
129
129
  sqlalchemy/ext/declarative/extensions.py,sha256=uCjN1GisQt54AjqYnKYzJdUjnGd2pZBW47WWdPlS7FE,19547
130
130
  sqlalchemy/ext/mypy/__init__.py,sha256=0WebDIZmqBD0OTq5JLtd_PmfF9JGxe4d4Qv3Ml3PKUg,241
@@ -137,42 +137,42 @@ sqlalchemy/ext/mypy/util.py,sha256=DKRaurkXHI2lAMAAcEO5GLXbX_m2Xqy7l_juh8Byf5U,9
137
137
  sqlalchemy/future/__init__.py,sha256=q2mw-gxk_xoxJLEvRoyMha3vO1xSRHrslcExOHZwmPA,512
138
138
  sqlalchemy/future/engine.py,sha256=AgIw6vMsef8W6tynOTkxsjd6o_OQDwGjLdbpoMD8ue8,495
139
139
  sqlalchemy/orm/__init__.py,sha256=ZYys5nL3RFUDCMOLFDBrRI52F6er3S1U1OY9TeORuKs,8463
140
- sqlalchemy/orm/_orm_constructors.py,sha256=c4RMiYKIXzOTjuPIBbyRIzpizYjUBm2sd7k0n1vqb2o,100717
140
+ sqlalchemy/orm/_orm_constructors.py,sha256=8EQfYsDL2k_ev0eK-wxMl3algouczN38Gu43CrRlAlo,103434
141
141
  sqlalchemy/orm/_typing.py,sha256=DVBfpHmDVK4x1zxaGJPY2GoTrAsyR6uexv20Lzf1afc,4973
142
142
  sqlalchemy/orm/attributes.py,sha256=lorOHBJvJJYndOuafWJhHBbQ1pR6FAyimhqz-mErBRQ,92534
143
- sqlalchemy/orm/base.py,sha256=re6A8ooMxLyfCAeQfhBwwxeJQkiH7EtzzOZIVIiTPlw,27466
144
- sqlalchemy/orm/bulk_persistence.py,sha256=MfFALcRkE3eKwxkntVM1ZcUhOphUFwAr1Fc21qJoobo,71403
143
+ sqlalchemy/orm/base.py,sha256=FXkYTSCDUJFQSB5pcyPt2wG-dRctf5P6ySjyjVxQsX0,27502
144
+ sqlalchemy/orm/bulk_persistence.py,sha256=1FC23bRJKjpfbp2D5hYuV1qOVIKGSswu9XPXbbSJ5Mo,72663
145
145
  sqlalchemy/orm/clsregistry.py,sha256=IjoDZwWpjG42ji59L4M1EZvjBEoXPZykzENDtKWxU8A,17974
146
146
  sqlalchemy/orm/collections.py,sha256=WEKuUCRgLhDhJEIBhZ21UrE0pBOyRm2zxD20GvbgA9g,52243
147
- sqlalchemy/orm/context.py,sha256=pFFc-1ZjaV3aQMAO27UIh0W6NyLc30n2IbuWNprMtS8,112445
147
+ sqlalchemy/orm/context.py,sha256=FMPyw07OA9OXWQ32RQx52AEa2xTLSkqdYgx9R_yN1x0,112955
148
148
  sqlalchemy/orm/decl_api.py,sha256=_WPKQ_vSE5k2TLtNmkaxxYmvbhZvkRMrrvCeDxdqDQE,63998
149
- sqlalchemy/orm/decl_base.py,sha256=FTHf3bCVlg52KR6JWVEwuG3XjOaGQ5KJMYFYXastGhw,82832
149
+ sqlalchemy/orm/decl_base.py,sha256=8R7go5sULTYNRlhYiEjXIJkQ34oPp7DY_fC2nS5D5is,83343
150
150
  sqlalchemy/orm/dependency.py,sha256=hgjksUWhgbmgHK5GdJdiDCBgDAIGQXIrY-Tj79tbL2k,47631
151
151
  sqlalchemy/orm/descriptor_props.py,sha256=dR_h4Gvdtpcdp4sj_ZOR4P5Nng2J2vhsvFHouRLlntc,37244
152
152
  sqlalchemy/orm/dynamic.py,sha256=rWAZ-nfAkREuNjt8e_FRdqYrvHDdbODn1CcfyP8Y18k,9816
153
- sqlalchemy/orm/evaluator.py,sha256=q292K5vdpP69G7Z9y1RqI5GFAk2diUPwnsXE8De_Wgw,11925
154
- sqlalchemy/orm/events.py,sha256=0lxP-EluVWSUr07ny2nsuQ8QhrDu9Qc4ON6QRUhuJnA,127703
153
+ sqlalchemy/orm/evaluator.py,sha256=tRETz4dNZ71VsEA8nG0hpefByB-W0zBt02IxcSR5H2g,12353
154
+ sqlalchemy/orm/events.py,sha256=1PiGT7JMUWTDAb3X1T79P02BMVDmcWEpatz1FwpLqoA,127777
155
155
  sqlalchemy/orm/exc.py,sha256=IP40P-wOeXhkYk0YizuTC3wqm6W9cPTaQU08f5MMaQ0,7413
156
156
  sqlalchemy/orm/identity.py,sha256=jHdCxCpCyda_8mFOfGmN_Pr0XZdKiU-2hFZshlNxbHs,9249
157
157
  sqlalchemy/orm/instrumentation.py,sha256=M-kZmkUvHUxtf-0mCA8RIM5QmMH1hWlYR_pKMwaidjA,24321
158
- sqlalchemy/orm/interfaces.py,sha256=Hmf1BjbfOarZRgMlruqghR7cgH2xyugA9v5t0x-a-wU,48502
158
+ sqlalchemy/orm/interfaces.py,sha256=7Lni4Cue41b1CsmN4VbeUyWwzuNMcKtkrpihc9U-WIw,48690
159
159
  sqlalchemy/orm/loading.py,sha256=9RacpzFOWbuKgPRWHFmyIvD4fYCLAnkpwBFASyQ2CoI,58277
160
160
  sqlalchemy/orm/mapped_collection.py,sha256=zK3d3iozORzDruBUrAmkVC0RR3Orj5szk-TSQ24xzIU,19682
161
- sqlalchemy/orm/mapper.py,sha256=bfoRzNKKnjF-CDvr2Df7HZC9TepvtuQ49LRz_fW7DGQ,171088
161
+ sqlalchemy/orm/mapper.py,sha256=W-srpoEc3UIYv_6qTXTd_dG_TVeQcToG77VGrXt85PM,171738
162
162
  sqlalchemy/orm/path_registry.py,sha256=sJZMv_WPqUpHfQtKWaX3WYFeKBcNJ8C3wOM2mkBGkTE,25920
163
163
  sqlalchemy/orm/persistence.py,sha256=dzyB2JOXNwQgaCbN8kh0sEz00WFePr48qf8NWVCUZH8,61701
164
164
  sqlalchemy/orm/properties.py,sha256=eDPFzxYUgdM3uWjHywnb1XW-i0tVKKyx7A2MCD31GQU,29306
165
- sqlalchemy/orm/query.py,sha256=woZDL-vAvu_CWQUgxf7geh7Bkl1gUE2zmrdF5UmTrFk,117630
165
+ sqlalchemy/orm/query.py,sha256=Cf0e94-u1XyoXJoOAmr4iFvtCwNY98kxUYyMPenaWTE,117708
166
166
  sqlalchemy/orm/relationships.py,sha256=dS5SY0v1MiD7iCNnAQlHaI6prUQhL5EkXT7ijc8FR8E,128644
167
167
  sqlalchemy/orm/scoping.py,sha256=rJVc7_Lic4V00HZ-UvYFWkVpXqdrMayRmIs4fIwH1UA,78688
168
168
  sqlalchemy/orm/session.py,sha256=CZJTQ-wPwIy0c3AMFxgJnBgaft6eEf4JzcCLcaaCSjg,195979
169
169
  sqlalchemy/orm/state.py,sha256=327-F4TG29s6mLC8oWRiO2PuvYIUZzY1MqUPjtUy7M4,37670
170
170
  sqlalchemy/orm/state_changes.py,sha256=qKYg7NxwrDkuUY3EPygAztym6oAVUFcP2wXn7QD3Mz4,6815
171
- sqlalchemy/orm/strategies.py,sha256=Sd6IKV_ya_CBKzebwazRrWWabvZ0PqariUB7KKUIUrc,115275
172
- sqlalchemy/orm/strategy_options.py,sha256=-n44NV8QX-3uWjhFMA_R_7vYy-d57gJY9snB9JeOj-w,85341
171
+ sqlalchemy/orm/strategies.py,sha256=-tsBRsmEqkaxAAIn4t2F-U5SrRIPoPCyzpqFYGTAwNs,119866
172
+ sqlalchemy/orm/strategy_options.py,sha256=oeDl_rMDNAC_90N7ytsni-psXWAeQMhABQFyKBSmai0,85353
173
173
  sqlalchemy/orm/sync.py,sha256=g7iZfSge1HgxMk9SKRgUgtHEbpbZ1kP_CBqOIdTOXqc,5779
174
174
  sqlalchemy/orm/unitofwork.py,sha256=fiVaqcymbDDHRa1NjS90N9Z466nd5pkJOEi1dHO6QLY,27033
175
- sqlalchemy/orm/util.py,sha256=Q0JT2JydyGiNiYT8AVe9B6jOdBRVHSOVDIcWOsXXIUQ,80929
175
+ sqlalchemy/orm/util.py,sha256=5SC4MOVU0cPObexDjpMvXvetueiU5pze42raL94gj24,81021
176
176
  sqlalchemy/orm/writeonly.py,sha256=SYu2sAaHZONk2pW4PmtE871LG-O0P_bjidvKzY1H_zI,22305
177
177
  sqlalchemy/pool/__init__.py,sha256=qiDdq4r4FFAoDrK6ncugF_i6usi_X1LeJt-CuBHey0s,1804
178
178
  sqlalchemy/pool/base.py,sha256=WF4az4ZKuzQGuKeSJeyexaYjmWZUvYdC6KIi8zTGodw,52236
@@ -180,7 +180,7 @@ sqlalchemy/pool/events.py,sha256=xGjkIUZl490ZDtCHqnQF9ZCwe2Jv93eGXmnQxftB11E,131
180
180
  sqlalchemy/pool/impl.py,sha256=JwpALSkH-pCoO_6oENbkHYY00Jx9nlttyoI61LivRNc,18944
181
181
  sqlalchemy/sql/__init__.py,sha256=UNa9EUiYWoPayf-FzNcwVgQvpsBdInPZfpJesAStN9o,5820
182
182
  sqlalchemy/sql/_dml_constructors.py,sha256=YdBJex0MCVACv4q2nl_ii3uhxzwU6aDB8zAsratX5UQ,3867
183
- sqlalchemy/sql/_elements_constructors.py,sha256=1SX6o1ezeB8C9DAa2m0WxmfhM3ji3FeCprXFQkNerNY,63048
183
+ sqlalchemy/sql/_elements_constructors.py,sha256=833Flez92odZkE2Vy6SXK8LcoO1AwkfVzOnATJLWFsA,63168
184
184
  sqlalchemy/sql/_orm_types.py,sha256=T-vjcry4C1y0GToFKVxQCnmly_-Zsq4IO4SHN6bvUF4,625
185
185
  sqlalchemy/sql/_py_util.py,sha256=hiM9ePbRSGs60bAMxPFuJCIC_p9SQ1VzqXGiPchiYwE,2173
186
186
  sqlalchemy/sql/_selectable_constructors.py,sha256=wjE6HrLm9cR7bxvZXT8sFLUqT6t_J9G1XyQCnYmBDl0,18780
@@ -188,10 +188,10 @@ sqlalchemy/sql/_typing.py,sha256=oqwrYHVMtK-AuKGH9c4SgfiOEJUt5vjkzSEzzscMHkM,127
188
188
  sqlalchemy/sql/annotation.py,sha256=aqbbVz9kfbCT3_66CZ9GEirVN197Cukoqt8rq48FgkQ,18245
189
189
  sqlalchemy/sql/base.py,sha256=M1b-Tg49ikUW2mnZv0aI38oASG6dgeo4jBNWDgJgAg8,73925
190
190
  sqlalchemy/sql/cache_key.py,sha256=0Db8mR8IrpBgdzXs4TGTt98LOpL3c7KABd72MAPKUQQ,33668
191
- sqlalchemy/sql/coercions.py,sha256=KjrVc2ks6cx_o6-_Zpu6uPuNGjJy2xvFzXy8z5oshQg,40628
191
+ sqlalchemy/sql/coercions.py,sha256=hAEou9Ycyswzu8yz_Q7QkwL2_c3nctzBJQS2oDEr4iE,40664
192
192
  sqlalchemy/sql/compiler.py,sha256=hrTptbOKIgVIHapywj4Lk5OMwpXvHS-KGg3odFwlo-I,274687
193
193
  sqlalchemy/sql/crud.py,sha256=HBX4QPtW_PYYJmIKfNr-wE8IdEr963N24WXzFBUZOo0,56514
194
- sqlalchemy/sql/ddl.py,sha256=CIqMilCKfuQnF0lrZsQdTxgrbXqcTauKr0Ojzj77PFQ,45602
194
+ sqlalchemy/sql/ddl.py,sha256=lKqvOigbcYrDG0euxd5F4tu9HbBi1kmp3eFPc45HH-8,45636
195
195
  sqlalchemy/sql/default_comparator.py,sha256=utXWsZVGEjflhFfCT4ywa6RnhORc1Rryo87Hga71Rps,16707
196
196
  sqlalchemy/sql/dml.py,sha256=pn0Lm1ofC5qVZzwGWFW73lPCiNba8OsTeemurJgwRyg,65614
197
197
  sqlalchemy/sql/elements.py,sha256=YfccXzQc9DlgF8q15kDf-zKBUY_vpIe0FGaVDBPoic4,176544
@@ -203,10 +203,10 @@ sqlalchemy/sql/naming.py,sha256=ZHs1qSV3ou8TYmZ92uvU3sfdklUQlIz4uhe330n05SU,6858
203
203
  sqlalchemy/sql/operators.py,sha256=himArRqBzrljob3Zfhi_ZS-Jleg1u6YFp0g3d7Co6IM,76106
204
204
  sqlalchemy/sql/roles.py,sha256=pOsVn_OZD7mF2gJByHf24Rjopt0_Hu3dUCEOK5t4KS8,7662
205
205
  sqlalchemy/sql/schema.py,sha256=iFleWHkxi-3mKGiK_N1TzUqxnNwOpypB4bWDuAVQe8c,229717
206
- sqlalchemy/sql/selectable.py,sha256=7QpgbIVz9AanhodMICFwDvaY2RdsTRSTvsRzD9Cnsds,236460
207
- sqlalchemy/sql/sqltypes.py,sha256=fajBVE_CCJykrQpOOnb8_HFOKCSoUF48AxljJymvGk4,127330
206
+ sqlalchemy/sql/selectable.py,sha256=cgyV0AsPy4CXAFdhMiTCkbgaHiFilW9sclzxlHJKH3o,236460
207
+ sqlalchemy/sql/sqltypes.py,sha256=5_N9MhprQFWYc3yjcXgFC_DmvkQU-Jz-Ok9nIMYp2Q4,127469
208
208
  sqlalchemy/sql/traversals.py,sha256=3ScTC1fh1-y8Y478h_2Azmd2xdQdWPWkDve4YgrwMf8,33664
209
- sqlalchemy/sql/type_api.py,sha256=q_FieFRALHiRkhy5Bj-cVgFHa7DXF1dP23FaRRYKeho,83717
209
+ sqlalchemy/sql/type_api.py,sha256=SN16_oNZG6G65cvG6ABPcptz_YV5vfB2fknwJZxrkOs,84464
210
210
  sqlalchemy/sql/util.py,sha256=qGHQF-tPCj-m1FBerzT7weCanGcXU7dK5m-W7NHio-4,48077
211
211
  sqlalchemy/sql/visitors.py,sha256=71wdVvhhZL4nJvVwFAs6ssaW-qZgNRSmKjpAcOzF_TA,36317
212
212
  sqlalchemy/testing/__init__.py,sha256=zgitAYzsCWT_U48ZiifXHHLJFo8nZBYmI-5TueA4_lE,3160
@@ -220,7 +220,7 @@ sqlalchemy/testing/exclusions.py,sha256=T8B01hmm8WVs-EKcUOQRzabahPqblWJfOidi6bHJ
220
220
  sqlalchemy/testing/pickleable.py,sha256=U9mIqk-zaxq9Xfy7HErP7UrKgTov-A3QFnhZh-NiOjI,2833
221
221
  sqlalchemy/testing/profiling.py,sha256=PbuPhRFbauFilUONeY3tV_Y_5lBkD7iCa8VVyH2Sk9Y,10148
222
222
  sqlalchemy/testing/provision.py,sha256=3qFor_sN1FFlS7odUGkKqLUxGmQZC9XM67I9vQ_zeXo,14626
223
- sqlalchemy/testing/requirements.py,sha256=uD7ZYOMZ0LQ0Lf8EsKWmDdRSnfcrjnXa8eSgTiIibOk,52655
223
+ sqlalchemy/testing/requirements.py,sha256=Z__o-1Rj9B7dI8E_l3qsKTvsg0rK198vB0A1p7A5dcM,52832
224
224
  sqlalchemy/testing/schema.py,sha256=lr4GkGrGwagaHMuSGzWdzkMaj3HnS7dgfLLWfxt__-U,6513
225
225
  sqlalchemy/testing/util.py,sha256=qldXKw8gRJ4I2x3uXsBssYMqwatmcMFMTOveRQCmfDU,14469
226
226
  sqlalchemy/testing/warnings.py,sha256=fJ-QJUY2zY2PPxZJKv9medW-BKKbCNbA4Ns_V3YwFXM,1546
@@ -239,7 +239,7 @@ sqlalchemy/testing/suite/test_ddl.py,sha256=1Npkf0C_4UNxphthAGjG078n0vPEgnSIHpDu
239
239
  sqlalchemy/testing/suite/test_deprecations.py,sha256=BcJxZTcjYqeOAENVElCg3hVvU6fkGEW3KGBMfnW8bng,5337
240
240
  sqlalchemy/testing/suite/test_dialect.py,sha256=EH4ZQWbnGdtjmx5amZtTyhYmrkXJCvW1SQoLahoE7uk,22923
241
241
  sqlalchemy/testing/suite/test_insert.py,sha256=9azifj6-OCD7s8h_tAO1uPw100ibQv8YoKc_VA3hn3c,18824
242
- sqlalchemy/testing/suite/test_reflection.py,sha256=tJSbJFg5fw0sSUv3I_FPmhN7rWWeJtq3YyxmylWJUlM,106466
242
+ sqlalchemy/testing/suite/test_reflection.py,sha256=7sML8-owubSQeEM7Ve6LbnB8uIVlNV00WWepKwII2a8,109648
243
243
  sqlalchemy/testing/suite/test_results.py,sha256=X720GafdA4p75SOGS93j-dXkt6QDEnnJbU2bh18VCcg,16914
244
244
  sqlalchemy/testing/suite/test_rowcount.py,sha256=3KDTlRgjpQ1OVfp__1cv8Hvq4CsDKzmrhJQ_WIJWoJg,7900
245
245
  sqlalchemy/testing/suite/test_select.py,sha256=ulRZQJlzkwwcewEyisuBEXVWFR0Wshz9MEDxYYiYLwQ,61732
@@ -247,12 +247,12 @@ sqlalchemy/testing/suite/test_sequence.py,sha256=66bCoy4xo99GBSaX6Hxb88foANAykLG
247
247
  sqlalchemy/testing/suite/test_types.py,sha256=K4MGHvnTtgqeksoQOBCZRVQYC7HoYO6Z6rVt5vj2t9o,67805
248
248
  sqlalchemy/testing/suite/test_unicode_ddl.py,sha256=c3_eIxLyORuSOhNDP0jWKxPyUf3SwMFpdalxtquwqlM,6141
249
249
  sqlalchemy/testing/suite/test_update_delete.py,sha256=yTiM2unnfOK9rK8ZkqeTTU_MkT-RsKFLmdYliniZfAY,3994
250
- sqlalchemy/util/__init__.py,sha256=B3bedg-LSQEscwqgmYYU-VENUX8_zAE3q9vb7tkfJNY,8277
250
+ sqlalchemy/util/__init__.py,sha256=5D5Mquvx3SOmud0QErKzzGvBTkqMdhrrd_sXijOILeo,8312
251
251
  sqlalchemy/util/_collections.py,sha256=aZoSAVOXnHBoYEsxDOi0O9odg9wqLbGb7PGjaWQKiyY,20078
252
252
  sqlalchemy/util/_concurrency_py3k.py,sha256=zb0Bow2Y_QjTdaACEviBEEaFvqDuVvpJfmwCjaw8xNE,9170
253
253
  sqlalchemy/util/_has_cy.py,sha256=wCQmeSjT3jaH_oxfCEtGk-1g0gbSpt5MCK5UcWdMWqk,1247
254
254
  sqlalchemy/util/_py_collections.py,sha256=U6L5AoyLdgSv7cdqB4xxQbw1rpeJjyOZVXffgxgga8I,16714
255
- sqlalchemy/util/compat.py,sha256=fJWqZVkW7qPY2l0DxK-7fHKjyp7b-wa-5wOlmuZlick,8724
255
+ sqlalchemy/util/compat.py,sha256=cnucBQOKspo58vjRpQXUBrHGguHOSFvftpD-I8vfUy0,8760
256
256
  sqlalchemy/util/concurrency.py,sha256=9lT_cMoO1fZNdY8QTUZ22oeSf-L5I-79Ke7chcBNPA0,3304
257
257
  sqlalchemy/util/deprecations.py,sha256=YBwvvYhSB8LhasIZRKvg_-WNoVhPUcaYI1ZrnjDn868,11971
258
258
  sqlalchemy/util/langhelpers.py,sha256=uIK3szZuq9aMnO-vEpSlNekNWv4I-E391e56bkTnUm0,65090
@@ -260,9 +260,9 @@ sqlalchemy/util/preloaded.py,sha256=az7NmLJLsqs0mtM9uBkIu10-841RYDq8wOyqJ7xXvqE,
260
260
  sqlalchemy/util/queue.py,sha256=CaeSEaYZ57YwtmLdNdOIjT5PK_LCuwMFiO0mpp39ybM,10185
261
261
  sqlalchemy/util/tool_support.py,sha256=9braZyidaiNrZVsWtGmkSmus50-byhuYrlAqvhjcmnA,6135
262
262
  sqlalchemy/util/topological.py,sha256=N3M3Le7KzGHCmqPGg0ZBqixTDGwmFLhOZvBtc4rHL_g,3458
263
- sqlalchemy/util/typing.py,sha256=VUVyYOXmPPlAW9e8OuVQ55Ij4b6jc0GPDEjY-Rlpnwo,17961
264
- SQLAlchemy-2.0.34.dist-info/LICENSE,sha256=PA9Zq4h9BB3mpOUv_j6e212VIt6Qn66abNettue-MpM,1100
265
- SQLAlchemy-2.0.34.dist-info/METADATA,sha256=TdwTMOhRN3N7sdV1_zHpx9GCBE_dm2jeU9_9UMTGYM8,9632
266
- SQLAlchemy-2.0.34.dist-info/WHEEL,sha256=uCRv0ZEik_232NlR4YDw4Pv3Ajt5bKvMH13NUU7hFuI,91
267
- SQLAlchemy-2.0.34.dist-info/top_level.txt,sha256=rp-ZgB7D8G11ivXON5VGPjupT1voYmWqkciDt5Uaw_Q,11
268
- SQLAlchemy-2.0.34.dist-info/RECORD,,
263
+ sqlalchemy/util/typing.py,sha256=lFcGo1dJbZIZ9drAnvef-PzP0cX4LMxMSwgk3lJBb0g,18182
264
+ SQLAlchemy-2.0.36.dist-info/LICENSE,sha256=PA9Zq4h9BB3mpOUv_j6e212VIt6Qn66abNettue-MpM,1100
265
+ SQLAlchemy-2.0.36.dist-info/METADATA,sha256=EZH514FydYtyOhgoZk_OF1ZQEtI4eTAEddlnUlRjzac,9692
266
+ SQLAlchemy-2.0.36.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
267
+ SQLAlchemy-2.0.36.dist-info/top_level.txt,sha256=rp-ZgB7D8G11ivXON5VGPjupT1voYmWqkciDt5Uaw_Q,11
268
+ SQLAlchemy-2.0.36.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (74.1.1)
2
+ Generator: setuptools (75.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
sqlalchemy/__init__.py CHANGED
@@ -269,7 +269,7 @@ from .types import Uuid as Uuid
269
269
  from .types import VARBINARY as VARBINARY
270
270
  from .types import VARCHAR as VARCHAR
271
271
 
272
- __version__ = "2.0.34"
272
+ __version__ = "2.0.36"
273
273
 
274
274
 
275
275
  def __go(lcls: Any) -> None:
@@ -9,7 +9,6 @@
9
9
  """
10
10
  .. dialect:: mssql
11
11
  :name: Microsoft SQL Server
12
- :full_support: 2017
13
12
  :normal_support: 2012+
14
13
  :best_effort: 2005+
15
14
 
@@ -11,7 +11,6 @@ r"""
11
11
 
12
12
  .. dialect:: mysql
13
13
  :name: MySQL / MariaDB
14
- :full_support: 5.6, 5.7, 8.0 / 10.8, 10.9
15
14
  :normal_support: 5.6+ / 10+
16
15
  :best_effort: 5.0.2+ / 5.0.2+
17
16
 
@@ -1850,7 +1849,15 @@ class MySQLDDLCompiler(compiler.DDLCompiler):
1850
1849
  else:
1851
1850
  default = self.get_column_default_string(column)
1852
1851
  if default is not None:
1853
- colspec.append("DEFAULT " + default)
1852
+ if (
1853
+ isinstance(
1854
+ column.server_default.arg, functions.FunctionElement
1855
+ )
1856
+ and self.dialect._support_default_function
1857
+ ):
1858
+ colspec.append(f"DEFAULT ({default})")
1859
+ else:
1860
+ colspec.append("DEFAULT " + default)
1854
1861
  return " ".join(colspec)
1855
1862
 
1856
1863
  def post_create_table(self, table):
@@ -2895,6 +2902,17 @@ class MySQLDialect(default.DefaultDialect):
2895
2902
  # ref https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-17.html#mysqld-8-0-17-feature # noqa
2896
2903
  return self.server_version_info >= (8, 0, 17)
2897
2904
 
2905
+ @property
2906
+ def _support_default_function(self):
2907
+ if not self.server_version_info:
2908
+ return False
2909
+ elif self.is_mariadb:
2910
+ # ref https://mariadb.com/kb/en/mariadb-1021-release-notes/
2911
+ return self.server_version_info >= (10, 2, 1)
2912
+ else:
2913
+ # ref https://dev.mysql.com/doc/refman/8.0/en/data-type-defaults.html # noqa
2914
+ return self.server_version_info >= (8, 0, 13)
2915
+
2898
2916
  @property
2899
2917
  def _is_mariadb(self):
2900
2918
  return self.is_mariadb
@@ -3052,29 +3070,47 @@ class MySQLDialect(default.DefaultDialect):
3052
3070
  return s
3053
3071
 
3054
3072
  default_schema_name = connection.dialect.default_schema_name
3055
- col_tuples = [
3056
- (
3057
- lower(rec["referred_schema"] or default_schema_name),
3058
- lower(rec["referred_table"]),
3059
- col_name,
3060
- )
3061
- for rec in fkeys
3062
- for col_name in rec["referred_columns"]
3063
- ]
3064
3073
 
3065
- if col_tuples:
3066
- correct_for_wrong_fk_case = connection.execute(
3067
- sql.text(
3068
- """
3069
- select table_schema, table_name, column_name
3070
- from information_schema.columns
3071
- where (table_schema, table_name, lower(column_name)) in
3072
- :table_data;
3073
- """
3074
- ).bindparams(sql.bindparam("table_data", expanding=True)),
3075
- dict(table_data=col_tuples),
3074
+ # NOTE: using (table_schema, table_name, lower(column_name)) in (...)
3075
+ # is very slow since mysql does not seem able to properly use indexse.
3076
+ # Unpack the where condition instead.
3077
+ schema_by_table_by_column = defaultdict(lambda: defaultdict(list))
3078
+ for rec in fkeys:
3079
+ sch = lower(rec["referred_schema"] or default_schema_name)
3080
+ tbl = lower(rec["referred_table"])
3081
+ for col_name in rec["referred_columns"]:
3082
+ schema_by_table_by_column[sch][tbl].append(col_name)
3083
+
3084
+ if schema_by_table_by_column:
3085
+
3086
+ condition = sql.or_(
3087
+ *(
3088
+ sql.and_(
3089
+ _info_columns.c.table_schema == schema,
3090
+ sql.or_(
3091
+ *(
3092
+ sql.and_(
3093
+ _info_columns.c.table_name == table,
3094
+ sql.func.lower(
3095
+ _info_columns.c.column_name
3096
+ ).in_(columns),
3097
+ )
3098
+ for table, columns in tables.items()
3099
+ )
3100
+ ),
3101
+ )
3102
+ for schema, tables in schema_by_table_by_column.items()
3103
+ )
3076
3104
  )
3077
3105
 
3106
+ select = sql.select(
3107
+ _info_columns.c.table_schema,
3108
+ _info_columns.c.table_name,
3109
+ _info_columns.c.column_name,
3110
+ ).where(condition)
3111
+
3112
+ correct_for_wrong_fk_case = connection.execute(select)
3113
+
3078
3114
  # in casing=0, table name and schema name come back in their
3079
3115
  # exact case.
3080
3116
  # in casing=1, table name and schema name come back in lower
@@ -3447,3 +3483,12 @@ class _DecodingRow:
3447
3483
  return item.decode(self.charset)
3448
3484
  else:
3449
3485
  return item
3486
+
3487
+
3488
+ _info_columns = sql.table(
3489
+ "columns",
3490
+ sql.column("table_schema", VARCHAR(64)),
3491
+ sql.column("table_name", VARCHAR(64)),
3492
+ sql.column("column_name", VARCHAR(64)),
3493
+ schema="information_schema",
3494
+ )
@@ -165,6 +165,7 @@ class MySQLDialect_mariadbconnector(MySQLDialect):
165
165
 
166
166
  def create_connect_args(self, url):
167
167
  opts = url.translate_connect_args()
168
+ opts.update(url.query)
168
169
 
169
170
  int_params = [
170
171
  "connect_timeout",
@@ -179,6 +180,7 @@ class MySQLDialect_mariadbconnector(MySQLDialect):
179
180
  "ssl_verify_cert",
180
181
  "ssl",
181
182
  "pool_reset_connection",
183
+ "compress",
182
184
  ]
183
185
 
184
186
  for key in int_params:
@@ -96,6 +96,7 @@ class MySQLDialect_mysqlconnector(MySQLDialect):
96
96
  util.coerce_kw_type(opts, "allow_local_infile", bool)
97
97
  util.coerce_kw_type(opts, "autocommit", bool)
98
98
  util.coerce_kw_type(opts, "buffered", bool)
99
+ util.coerce_kw_type(opts, "client_flag", int)
99
100
  util.coerce_kw_type(opts, "compress", bool)
100
101
  util.coerce_kw_type(opts, "connection_timeout", int)
101
102
  util.coerce_kw_type(opts, "connect_timeout", int)
@@ -212,7 +212,7 @@ class MySQLDialect_mysqldb(MySQLDialect):
212
212
  util.coerce_kw_type(opts, "read_timeout", int)
213
213
  util.coerce_kw_type(opts, "write_timeout", int)
214
214
  util.coerce_kw_type(opts, "client_flag", int)
215
- util.coerce_kw_type(opts, "local_infile", int)
215
+ util.coerce_kw_type(opts, "local_infile", bool)
216
216
  # Note: using either of the below will cause all strings to be
217
217
  # returned as Unicode, both in raw SQL operations and with column
218
218
  # types like String and MSString.
@@ -40,6 +40,9 @@ def generate_driver_url(url, driver, query_str):
40
40
  drivername="%s+%s" % (backend, driver)
41
41
  ).update_query_string(query_str)
42
42
 
43
+ if driver == "mariadbconnector":
44
+ new_url = new_url.difference_update_query(["charset"])
45
+
43
46
  try:
44
47
  new_url.get_dialect()
45
48
  except exc.NoSuchModuleError:
@@ -10,7 +10,6 @@
10
10
  r"""
11
11
  .. dialect:: oracle
12
12
  :name: Oracle
13
- :full_support: 18c
14
13
  :normal_support: 11+
15
14
  :best_effort: 9+
16
15
 
@@ -331,7 +330,7 @@ ON UPDATE CASCADE
331
330
 
332
331
  Oracle doesn't have native ON UPDATE CASCADE functionality. A trigger based
333
332
  solution is available at
334
- https://asktom.oracle.com/tkyte/update_cascade/index.html .
333
+ https://web.archive.org/web/20090317041251/https://asktom.oracle.com/tkyte/update_cascade/index.html
335
334
 
336
335
  When using the SQLAlchemy ORM, the ORM has limited ability to manually issue
337
336
  cascading updates - specify ForeignKey objects using the
@@ -1277,7 +1276,7 @@ class OracleDDLCompiler(compiler.DDLCompiler):
1277
1276
 
1278
1277
  # oracle has no ON UPDATE CASCADE -
1279
1278
  # its only available via triggers
1280
- # https://asktom.oracle.com/tkyte/update_cascade/index.html
1279
+ # https://web.archive.org/web/20090317041251/https://asktom.oracle.com/tkyte/update_cascade/index.html
1281
1280
  if constraint.onupdate is not None:
1282
1281
  util.warn(
1283
1282
  "Oracle does not contain native UPDATE CASCADE "
@@ -263,15 +263,11 @@ class AsyncpgBigInteger(sqltypes.BigInteger):
263
263
 
264
264
 
265
265
  class AsyncpgJSON(json.JSON):
266
- render_bind_cast = True
267
-
268
266
  def result_processor(self, dialect, coltype):
269
267
  return None
270
268
 
271
269
 
272
270
  class AsyncpgJSONB(json.JSONB):
273
- render_bind_cast = True
274
-
275
271
  def result_processor(self, dialect, coltype):
276
272
  return None
277
273
 
@@ -9,7 +9,6 @@
9
9
  r"""
10
10
  .. dialect:: postgresql
11
11
  :name: PostgreSQL
12
- :full_support: 12, 13, 14, 15
13
12
  :normal_support: 9.6+
14
13
  :best_effort: 9+
15
14
 
@@ -4689,6 +4688,8 @@ class PGDialect(default.DefaultDialect):
4689
4688
  pg_catalog.pg_class.c.oid
4690
4689
  == pg_catalog.pg_description.c.objoid,
4691
4690
  pg_catalog.pg_description.c.objsubid == 0,
4691
+ pg_catalog.pg_description.c.classoid
4692
+ == sql.func.cast("pg_catalog.pg_class", REGCLASS),
4692
4693
  ),
4693
4694
  )
4694
4695
  .where(self._pg_class_relkind_condition(relkinds))
@@ -144,6 +144,7 @@ class JSON(sqltypes.JSON):
144
144
 
145
145
  """ # noqa
146
146
 
147
+ render_bind_cast = True
147
148
  astext_type = sqltypes.Text()
148
149
 
149
150
  def __init__(self, none_as_null=False, astext_type=None):
@@ -256,22 +257,27 @@ class JSONB(JSON):
256
257
  """Define comparison operations for :class:`_types.JSON`."""
257
258
 
258
259
  def has_key(self, other):
259
- """Boolean expression. Test for presence of a key. Note that the
260
- key may be a SQLA expression.
260
+ """Boolean expression. Test for presence of a key (equivalent of
261
+ the ``?`` operator). Note that the key may be a SQLA expression.
261
262
  """
262
263
  return self.operate(HAS_KEY, other, result_type=sqltypes.Boolean)
263
264
 
264
265
  def has_all(self, other):
265
- """Boolean expression. Test for presence of all keys in jsonb"""
266
+ """Boolean expression. Test for presence of all keys in jsonb
267
+ (equivalent of the ``?&`` operator)
268
+ """
266
269
  return self.operate(HAS_ALL, other, result_type=sqltypes.Boolean)
267
270
 
268
271
  def has_any(self, other):
269
- """Boolean expression. Test for presence of any key in jsonb"""
272
+ """Boolean expression. Test for presence of any key in jsonb
273
+ (equivalent of the ``?|`` operator)
274
+ """
270
275
  return self.operate(HAS_ANY, other, result_type=sqltypes.Boolean)
271
276
 
272
277
  def contains(self, other, **kwargs):
273
278
  """Boolean expression. Test if keys (or array) are a superset
274
- of/contained the keys of the argument jsonb expression.
279
+ of/contained the keys of the argument jsonb expression
280
+ (equivalent of the ``@>`` operator).
275
281
 
276
282
  kwargs may be ignored by this operator but are required for API
277
283
  conformance.
@@ -280,7 +286,8 @@ class JSONB(JSON):
280
286
 
281
287
  def contained_by(self, other):
282
288
  """Boolean expression. Test if keys are a proper subset of the
283
- keys of the argument jsonb expression.
289
+ keys of the argument jsonb expression
290
+ (equivalent of the ``<@`` operator).
284
291
  """
285
292
  return self.operate(
286
293
  CONTAINED_BY, other, result_type=sqltypes.Boolean
@@ -288,7 +295,7 @@ class JSONB(JSON):
288
295
 
289
296
  def delete_path(self, array):
290
297
  """JSONB expression. Deletes field or array element specified in
291
- the argument array.
298
+ the argument array (equivalent of the ``#-`` operator).
292
299
 
293
300
  The input may be a list of strings that will be coerced to an
294
301
  ``ARRAY`` or an instance of :meth:`_postgres.array`.
@@ -302,7 +309,7 @@ class JSONB(JSON):
302
309
 
303
310
  def path_exists(self, other):
304
311
  """Boolean expression. Test for presence of item given by the
305
- argument JSONPath expression.
312
+ argument JSONPath expression (equivalent of the ``@?`` operator).
306
313
 
307
314
  .. versionadded:: 2.0
308
315
  """
@@ -312,7 +319,8 @@ class JSONB(JSON):
312
319
 
313
320
  def path_match(self, other):
314
321
  """Boolean expression. Test if JSONPath predicate given by the
315
- argument JSONPath expression matches.
322
+ argument JSONPath expression matches
323
+ (equivalent of the ``@@`` operator).
316
324
 
317
325
  Only the first item of the result is taken into account.
318
326
 
@@ -126,8 +126,6 @@ class _PGREGCONFIG(REGCONFIG):
126
126
 
127
127
 
128
128
  class _PGJSON(JSON):
129
- render_bind_cast = True
130
-
131
129
  def bind_processor(self, dialect):
132
130
  return self._make_bind_processor(None, dialect._psycopg_Json)
133
131
 
@@ -136,8 +134,6 @@ class _PGJSON(JSON):
136
134
 
137
135
 
138
136
  class _PGJSONB(JSONB):
139
- render_bind_cast = True
140
-
141
137
  def bind_processor(self, dialect):
142
138
  return self._make_bind_processor(None, dialect._psycopg_Jsonb)
143
139