SQLAlchemy 2.0.35__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.
- {SQLAlchemy-2.0.35.dist-info → SQLAlchemy-2.0.36.dist-info}/METADATA +3 -2
- {SQLAlchemy-2.0.35.dist-info → SQLAlchemy-2.0.36.dist-info}/RECORD +34 -34
- sqlalchemy/__init__.py +1 -1
- sqlalchemy/dialects/mssql/base.py +0 -1
- sqlalchemy/dialects/mysql/base.py +67 -22
- sqlalchemy/dialects/oracle/base.py +0 -1
- sqlalchemy/dialects/postgresql/asyncpg.py +0 -4
- sqlalchemy/dialects/postgresql/base.py +2 -1
- sqlalchemy/dialects/postgresql/json.py +1 -0
- sqlalchemy/dialects/postgresql/psycopg.py +0 -4
- sqlalchemy/dialects/sqlite/base.py +0 -1
- sqlalchemy/engine/result.py +8 -8
- sqlalchemy/ext/associationproxy.py +9 -1
- sqlalchemy/ext/asyncio/result.py +8 -8
- sqlalchemy/ext/asyncio/session.py +1 -1
- sqlalchemy/ext/compiler.py +23 -8
- sqlalchemy/orm/_orm_constructors.py +69 -10
- sqlalchemy/orm/base.py +2 -0
- sqlalchemy/orm/bulk_persistence.py +84 -45
- sqlalchemy/orm/decl_base.py +10 -0
- sqlalchemy/orm/interfaces.py +5 -0
- sqlalchemy/orm/mapper.py +12 -1
- sqlalchemy/orm/strategies.py +158 -87
- sqlalchemy/orm/util.py +2 -1
- sqlalchemy/sql/_elements_constructors.py +3 -0
- sqlalchemy/sql/coercions.py +7 -7
- sqlalchemy/sql/ddl.py +5 -5
- sqlalchemy/sql/sqltypes.py +6 -0
- sqlalchemy/sql/type_api.py +28 -7
- sqlalchemy/util/__init__.py +1 -0
- sqlalchemy/util/compat.py +1 -0
- {SQLAlchemy-2.0.35.dist-info → SQLAlchemy-2.0.36.dist-info}/LICENSE +0 -0
- {SQLAlchemy-2.0.35.dist-info → SQLAlchemy-2.0.36.dist-info}/WHEEL +0 -0
- {SQLAlchemy-2.0.35.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.
|
|
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=
|
|
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=
|
|
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,7 +31,7 @@ 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=
|
|
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
|
|
@@ -48,7 +48,7 @@ sqlalchemy/dialects/mysql/reflection.py,sha256=3u34YwT1JJh3uThGZJZ3FKdnUcT7v08QB
|
|
|
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=
|
|
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=
|
|
61
|
-
sqlalchemy/dialects/postgresql/base.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
110
|
+
sqlalchemy/ext/associationproxy.py,sha256=ZGc_ssGf7FC6eKrja1iTvnWEKLkFZQA8CiVAjR8iVRw,66062
|
|
111
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=
|
|
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=
|
|
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=
|
|
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,16 +137,16 @@ 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=
|
|
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=
|
|
144
|
-
sqlalchemy/orm/bulk_persistence.py,sha256=
|
|
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
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=
|
|
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
|
|
@@ -155,10 +155,10 @@ sqlalchemy/orm/events.py,sha256=1PiGT7JMUWTDAb3X1T79P02BMVDmcWEpatz1FwpLqoA,1277
|
|
|
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=
|
|
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=
|
|
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
|
|
@@ -168,11 +168,11 @@ sqlalchemy/orm/scoping.py,sha256=rJVc7_Lic4V00HZ-UvYFWkVpXqdrMayRmIs4fIwH1UA,786
|
|
|
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
|
|
171
|
+
sqlalchemy/orm/strategies.py,sha256=-tsBRsmEqkaxAAIn4t2F-U5SrRIPoPCyzpqFYGTAwNs,119866
|
|
172
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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
|
|
@@ -204,9 +204,9 @@ sqlalchemy/sql/operators.py,sha256=himArRqBzrljob3Zfhi_ZS-Jleg1u6YFp0g3d7Co6IM,7
|
|
|
204
204
|
sqlalchemy/sql/roles.py,sha256=pOsVn_OZD7mF2gJByHf24Rjopt0_Hu3dUCEOK5t4KS8,7662
|
|
205
205
|
sqlalchemy/sql/schema.py,sha256=iFleWHkxi-3mKGiK_N1TzUqxnNwOpypB4bWDuAVQe8c,229717
|
|
206
206
|
sqlalchemy/sql/selectable.py,sha256=cgyV0AsPy4CXAFdhMiTCkbgaHiFilW9sclzxlHJKH3o,236460
|
|
207
|
-
sqlalchemy/sql/sqltypes.py,sha256=
|
|
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=
|
|
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
|
|
@@ -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=
|
|
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=
|
|
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
|
|
@@ -261,8 +261,8 @@ sqlalchemy/util/queue.py,sha256=CaeSEaYZ57YwtmLdNdOIjT5PK_LCuwMFiO0mpp39ybM,1018
|
|
|
261
261
|
sqlalchemy/util/tool_support.py,sha256=9braZyidaiNrZVsWtGmkSmus50-byhuYrlAqvhjcmnA,6135
|
|
262
262
|
sqlalchemy/util/topological.py,sha256=N3M3Le7KzGHCmqPGg0ZBqixTDGwmFLhOZvBtc4rHL_g,3458
|
|
263
263
|
sqlalchemy/util/typing.py,sha256=lFcGo1dJbZIZ9drAnvef-PzP0cX4LMxMSwgk3lJBb0g,18182
|
|
264
|
-
SQLAlchemy-2.0.
|
|
265
|
-
SQLAlchemy-2.0.
|
|
266
|
-
SQLAlchemy-2.0.
|
|
267
|
-
SQLAlchemy-2.0.
|
|
268
|
-
SQLAlchemy-2.0.
|
|
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,,
|
sqlalchemy/__init__.py
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
3066
|
-
|
|
3067
|
-
|
|
3068
|
-
|
|
3069
|
-
|
|
3070
|
-
|
|
3071
|
-
|
|
3072
|
-
|
|
3073
|
-
|
|
3074
|
-
|
|
3075
|
-
|
|
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
|
+
)
|
|
@@ -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))
|
|
@@ -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
|
|
sqlalchemy/engine/result.py
CHANGED
|
@@ -1452,11 +1452,11 @@ class Result(_WithKeys, ResultInternal[Row[_TP]]):
|
|
|
1452
1452
|
"""Return exactly one scalar result or raise an exception.
|
|
1453
1453
|
|
|
1454
1454
|
This is equivalent to calling :meth:`_engine.Result.scalars` and
|
|
1455
|
-
then :meth:`_engine.
|
|
1455
|
+
then :meth:`_engine.ScalarResult.one`.
|
|
1456
1456
|
|
|
1457
1457
|
.. seealso::
|
|
1458
1458
|
|
|
1459
|
-
:meth:`_engine.
|
|
1459
|
+
:meth:`_engine.ScalarResult.one`
|
|
1460
1460
|
|
|
1461
1461
|
:meth:`_engine.Result.scalars`
|
|
1462
1462
|
|
|
@@ -1475,11 +1475,11 @@ class Result(_WithKeys, ResultInternal[Row[_TP]]):
|
|
|
1475
1475
|
"""Return exactly one scalar result or ``None``.
|
|
1476
1476
|
|
|
1477
1477
|
This is equivalent to calling :meth:`_engine.Result.scalars` and
|
|
1478
|
-
then :meth:`_engine.
|
|
1478
|
+
then :meth:`_engine.ScalarResult.one_or_none`.
|
|
1479
1479
|
|
|
1480
1480
|
.. seealso::
|
|
1481
1481
|
|
|
1482
|
-
:meth:`_engine.
|
|
1482
|
+
:meth:`_engine.ScalarResult.one_or_none`
|
|
1483
1483
|
|
|
1484
1484
|
:meth:`_engine.Result.scalars`
|
|
1485
1485
|
|
|
@@ -1917,11 +1917,11 @@ class TupleResult(FilterResult[_R], util.TypingOnly):
|
|
|
1917
1917
|
"""Return exactly one scalar result or raise an exception.
|
|
1918
1918
|
|
|
1919
1919
|
This is equivalent to calling :meth:`_engine.Result.scalars`
|
|
1920
|
-
and then :meth:`_engine.
|
|
1920
|
+
and then :meth:`_engine.ScalarResult.one`.
|
|
1921
1921
|
|
|
1922
1922
|
.. seealso::
|
|
1923
1923
|
|
|
1924
|
-
:meth:`_engine.
|
|
1924
|
+
:meth:`_engine.ScalarResult.one`
|
|
1925
1925
|
|
|
1926
1926
|
:meth:`_engine.Result.scalars`
|
|
1927
1927
|
|
|
@@ -1940,11 +1940,11 @@ class TupleResult(FilterResult[_R], util.TypingOnly):
|
|
|
1940
1940
|
"""Return exactly one or no scalar result.
|
|
1941
1941
|
|
|
1942
1942
|
This is equivalent to calling :meth:`_engine.Result.scalars`
|
|
1943
|
-
and then :meth:`_engine.
|
|
1943
|
+
and then :meth:`_engine.ScalarResult.one_or_none`.
|
|
1944
1944
|
|
|
1945
1945
|
.. seealso::
|
|
1946
1946
|
|
|
1947
|
-
:meth:`_engine.
|
|
1947
|
+
:meth:`_engine.ScalarResult.one_or_none`
|
|
1948
1948
|
|
|
1949
1949
|
:meth:`_engine.Result.scalars`
|
|
1950
1950
|
|
|
@@ -98,6 +98,7 @@ def association_proxy(
|
|
|
98
98
|
default_factory: Union[_NoArg, Callable[[], _T]] = _NoArg.NO_ARG,
|
|
99
99
|
compare: Union[_NoArg, bool] = _NoArg.NO_ARG,
|
|
100
100
|
kw_only: Union[_NoArg, bool] = _NoArg.NO_ARG,
|
|
101
|
+
hash: Union[_NoArg, bool, None] = _NoArg.NO_ARG, # noqa: A002
|
|
101
102
|
) -> AssociationProxy[Any]:
|
|
102
103
|
r"""Return a Python property implementing a view of a target
|
|
103
104
|
attribute which references an attribute on members of the
|
|
@@ -198,6 +199,13 @@ def association_proxy(
|
|
|
198
199
|
|
|
199
200
|
.. versionadded:: 2.0.0b4
|
|
200
201
|
|
|
202
|
+
:param hash: Specific to
|
|
203
|
+
:ref:`orm_declarative_native_dataclasses`, controls if this field
|
|
204
|
+
is included when generating the ``__hash__()`` method for the mapped
|
|
205
|
+
class.
|
|
206
|
+
|
|
207
|
+
.. versionadded:: 2.0.36
|
|
208
|
+
|
|
201
209
|
:param info: optional, will be assigned to
|
|
202
210
|
:attr:`.AssociationProxy.info` if present.
|
|
203
211
|
|
|
@@ -237,7 +245,7 @@ def association_proxy(
|
|
|
237
245
|
cascade_scalar_deletes=cascade_scalar_deletes,
|
|
238
246
|
create_on_none_assignment=create_on_none_assignment,
|
|
239
247
|
attribute_options=_AttributeOptions(
|
|
240
|
-
init, repr, default, default_factory, compare, kw_only
|
|
248
|
+
init, repr, default, default_factory, compare, kw_only, hash
|
|
241
249
|
),
|
|
242
250
|
)
|
|
243
251
|
|
sqlalchemy/ext/asyncio/result.py
CHANGED
|
@@ -333,11 +333,11 @@ class AsyncResult(_WithKeys, AsyncCommon[Row[_TP]]):
|
|
|
333
333
|
"""Return exactly one scalar result or raise an exception.
|
|
334
334
|
|
|
335
335
|
This is equivalent to calling :meth:`_asyncio.AsyncResult.scalars` and
|
|
336
|
-
then :meth:`_asyncio.
|
|
336
|
+
then :meth:`_asyncio.AsyncScalarResult.one`.
|
|
337
337
|
|
|
338
338
|
.. seealso::
|
|
339
339
|
|
|
340
|
-
:meth:`_asyncio.
|
|
340
|
+
:meth:`_asyncio.AsyncScalarResult.one`
|
|
341
341
|
|
|
342
342
|
:meth:`_asyncio.AsyncResult.scalars`
|
|
343
343
|
|
|
@@ -356,11 +356,11 @@ class AsyncResult(_WithKeys, AsyncCommon[Row[_TP]]):
|
|
|
356
356
|
"""Return exactly one scalar result or ``None``.
|
|
357
357
|
|
|
358
358
|
This is equivalent to calling :meth:`_asyncio.AsyncResult.scalars` and
|
|
359
|
-
then :meth:`_asyncio.
|
|
359
|
+
then :meth:`_asyncio.AsyncScalarResult.one_or_none`.
|
|
360
360
|
|
|
361
361
|
.. seealso::
|
|
362
362
|
|
|
363
|
-
:meth:`_asyncio.
|
|
363
|
+
:meth:`_asyncio.AsyncScalarResult.one_or_none`
|
|
364
364
|
|
|
365
365
|
:meth:`_asyncio.AsyncResult.scalars`
|
|
366
366
|
|
|
@@ -869,11 +869,11 @@ class AsyncTupleResult(AsyncCommon[_R], util.TypingOnly):
|
|
|
869
869
|
"""Return exactly one scalar result or raise an exception.
|
|
870
870
|
|
|
871
871
|
This is equivalent to calling :meth:`_engine.Result.scalars`
|
|
872
|
-
and then :meth:`_engine.
|
|
872
|
+
and then :meth:`_engine.AsyncScalarResult.one`.
|
|
873
873
|
|
|
874
874
|
.. seealso::
|
|
875
875
|
|
|
876
|
-
:meth:`_engine.
|
|
876
|
+
:meth:`_engine.AsyncScalarResult.one`
|
|
877
877
|
|
|
878
878
|
:meth:`_engine.Result.scalars`
|
|
879
879
|
|
|
@@ -892,11 +892,11 @@ class AsyncTupleResult(AsyncCommon[_R], util.TypingOnly):
|
|
|
892
892
|
"""Return exactly one or no scalar result.
|
|
893
893
|
|
|
894
894
|
This is equivalent to calling :meth:`_engine.Result.scalars`
|
|
895
|
-
and then :meth:`_engine.
|
|
895
|
+
and then :meth:`_engine.AsyncScalarResult.one_or_none`.
|
|
896
896
|
|
|
897
897
|
.. seealso::
|
|
898
898
|
|
|
899
|
-
:meth:`_engine.
|
|
899
|
+
:meth:`_engine.AsyncScalarResult.one_or_none`
|
|
900
900
|
|
|
901
901
|
:meth:`_engine.Result.scalars`
|
|
902
902
|
|
|
@@ -1863,7 +1863,7 @@ class AsyncSessionTransaction(
|
|
|
1863
1863
|
) -> AsyncSessionTransaction:
|
|
1864
1864
|
self.sync_transaction = self._assign_proxied(
|
|
1865
1865
|
await greenlet_spawn(
|
|
1866
|
-
self.session.sync_session.begin_nested
|
|
1866
|
+
self.session.sync_session.begin_nested
|
|
1867
1867
|
if self.nested
|
|
1868
1868
|
else self.session.sync_session.begin
|
|
1869
1869
|
)
|