SQLAlchemy 2.0.29__py3-none-any.whl → 2.0.31__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.29.dist-info → SQLAlchemy-2.0.31.dist-info}/METADATA +2 -2
- {SQLAlchemy-2.0.29.dist-info → SQLAlchemy-2.0.31.dist-info}/RECORD +53 -53
- sqlalchemy/__init__.py +1 -1
- sqlalchemy/connectors/asyncio.py +2 -6
- sqlalchemy/dialects/mysql/aiomysql.py +11 -10
- sqlalchemy/dialects/mysql/asyncmy.py +10 -10
- sqlalchemy/dialects/mysql/reflection.py +1 -1
- sqlalchemy/dialects/postgresql/asyncpg.py +21 -26
- sqlalchemy/dialects/postgresql/psycopg.py +41 -14
- sqlalchemy/dialects/postgresql/psycopg2.py +1 -1
- sqlalchemy/dialects/sqlite/aiosqlite.py +10 -10
- sqlalchemy/engine/base.py +3 -7
- sqlalchemy/engine/characteristics.py +76 -2
- sqlalchemy/engine/cursor.py +13 -10
- sqlalchemy/engine/default.py +9 -4
- sqlalchemy/event/api.py +1 -1
- sqlalchemy/event/base.py +7 -0
- sqlalchemy/ext/asyncio/scoping.py +1 -1
- sqlalchemy/ext/asyncio/session.py +1 -1
- sqlalchemy/ext/automap.py +93 -60
- sqlalchemy/ext/hybrid.py +1 -1
- sqlalchemy/ext/serializer.py +19 -23
- sqlalchemy/orm/_orm_constructors.py +31 -0
- sqlalchemy/orm/bulk_persistence.py +7 -0
- sqlalchemy/orm/context.py +16 -4
- sqlalchemy/orm/decl_api.py +22 -14
- sqlalchemy/orm/decl_base.py +34 -6
- sqlalchemy/orm/loading.py +32 -15
- sqlalchemy/orm/mapper.py +2 -1
- sqlalchemy/orm/path_registry.py +14 -11
- sqlalchemy/orm/properties.py +1 -1
- sqlalchemy/orm/scoping.py +1 -1
- sqlalchemy/orm/session.py +73 -21
- sqlalchemy/orm/state.py +13 -6
- sqlalchemy/orm/strategies.py +28 -4
- sqlalchemy/orm/strategy_options.py +19 -5
- sqlalchemy/orm/util.py +4 -2
- sqlalchemy/sql/_elements_constructors.py +14 -7
- sqlalchemy/sql/_typing.py +5 -2
- sqlalchemy/sql/base.py +18 -13
- sqlalchemy/sql/compiler.py +8 -3
- sqlalchemy/sql/elements.py +110 -33
- sqlalchemy/sql/functions.py +4 -1
- sqlalchemy/sql/schema.py +52 -6
- sqlalchemy/sql/selectable.py +47 -24
- sqlalchemy/sql/sqltypes.py +24 -6
- sqlalchemy/util/_collections.py +3 -3
- sqlalchemy/util/_concurrency_py3k.py +22 -24
- sqlalchemy/util/langhelpers.py +11 -12
- sqlalchemy/util/typing.py +1 -1
- {SQLAlchemy-2.0.29.dist-info → SQLAlchemy-2.0.31.dist-info}/LICENSE +0 -0
- {SQLAlchemy-2.0.29.dist-info → SQLAlchemy-2.0.31.dist-info}/WHEEL +0 -0
- {SQLAlchemy-2.0.29.dist-info → SQLAlchemy-2.0.31.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.31
|
|
4
4
|
Summary: Database Abstraction Library
|
|
5
5
|
Home-page: https://www.sqlalchemy.org
|
|
6
6
|
Author: Mike Bayer
|
|
@@ -27,7 +27,7 @@ Requires-Python: >=3.7
|
|
|
27
27
|
Description-Content-Type: text/x-rst
|
|
28
28
|
License-File: LICENSE
|
|
29
29
|
Requires-Dist: typing-extensions >=4.6.0
|
|
30
|
-
Requires-Dist: greenlet !=0.4.17 ; platform_machine == "aarch64" or (platform_machine == "ppc64le" or (platform_machine == "x86_64" or (platform_machine == "amd64" or (platform_machine == "AMD64" or (platform_machine == "win32" or platform_machine == "WIN32")))))
|
|
30
|
+
Requires-Dist: greenlet !=0.4.17 ; python_version < "3.13" and (platform_machine == "aarch64" or (platform_machine == "ppc64le" or (platform_machine == "x86_64" or (platform_machine == "amd64" or (platform_machine == "AMD64" or (platform_machine == "win32" or platform_machine == "WIN32"))))))
|
|
31
31
|
Requires-Dist: importlib-metadata ; python_version < "3.8"
|
|
32
32
|
Provides-Extra: aiomysql
|
|
33
33
|
Requires-Dist: greenlet !=0.4.17 ; extra == 'aiomysql'
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
sqlalchemy/__init__.py,sha256=
|
|
1
|
+
sqlalchemy/__init__.py,sha256=sz89h0rk4HnopZTE-CXiZz3UlVY8JOD-IuYU_8VFqxU,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
|
|
@@ -8,7 +8,7 @@ sqlalchemy/schema.py,sha256=dKiWmgHYjcKQ4TiiD6vD0UMmIsD8u0Fsor1M9AAeGUs,3194
|
|
|
8
8
|
sqlalchemy/types.py,sha256=cQFM-hFRmaf1GErun1qqgEs6QxufvzMuwKqj9tuMPpE,3168
|
|
9
9
|
sqlalchemy/connectors/__init__.py,sha256=PzXPqZqi3BzEnrs1eW0DcsR4lyknAzhhN9rWcQ97hb4,476
|
|
10
10
|
sqlalchemy/connectors/aioodbc.py,sha256=GSTiNMO9h0qjPxgqaxDwWZ8HvhWMFNVR6MJQnN1oc40,5288
|
|
11
|
-
sqlalchemy/connectors/asyncio.py,sha256=
|
|
11
|
+
sqlalchemy/connectors/asyncio.py,sha256=K3U5857TD0GmJXIhxgRljKnJhJNzYFhQ8UjyFX0Yyoo,5878
|
|
12
12
|
sqlalchemy/connectors/pyodbc.py,sha256=t7AjyxIOnaWg3CrlUEpBs4Y5l0HFdNt3P_cSSKhbi0Y,8501
|
|
13
13
|
sqlalchemy/cyextension/__init__.py,sha256=GzhhN8cjMnDTE0qerlUlpbrNmFPHQWCZ4Gk74OAxl04,244
|
|
14
14
|
sqlalchemy/cyextension/collections.pyx,sha256=L7DZ3DGKpgw2MT2ZZRRxCnrcyE5pU1NAFowWgAzQPEc,12571
|
|
@@ -29,8 +29,8 @@ sqlalchemy/dialects/mssql/provision.py,sha256=RTVbgYLFAHzEnpVQDJroU8ji_10MqBTiZf
|
|
|
29
29
|
sqlalchemy/dialects/mssql/pymssql.py,sha256=eZRLz7HGt3SdoZUjFBmA9BS43N7AhIASw7VPBPEJuG0,4038
|
|
30
30
|
sqlalchemy/dialects/mssql/pyodbc.py,sha256=vwM-vBlmRwrqxOc73P0sFOrBSwn24wzc5IkEOpalbXQ,27056
|
|
31
31
|
sqlalchemy/dialects/mysql/__init__.py,sha256=bxbi4hkysUK2OOVvr1F49akUj1cky27kKb07tgFzI9U,2153
|
|
32
|
-
sqlalchemy/dialects/mysql/aiomysql.py,sha256
|
|
33
|
-
sqlalchemy/dialects/mysql/asyncmy.py,sha256=
|
|
32
|
+
sqlalchemy/dialects/mysql/aiomysql.py,sha256=-oMZnCqNsSki8mlQRTWIwiQPT1OVdZIuANkb90q8LAs,9999
|
|
33
|
+
sqlalchemy/dialects/mysql/asyncmy.py,sha256=YpuuOh8VknEeqHqUXQGfQ3jhfO3Xb-vZv78Jq5cscJ0,10067
|
|
34
34
|
sqlalchemy/dialects/mysql/base.py,sha256=KA7tvRxKUw0KwHwMth2rz-NWV0xMkVbYvPoBM9wrAFw,120850
|
|
35
35
|
sqlalchemy/dialects/mysql/cymysql.py,sha256=eXT1ry0w_qRxjiO24M980c-8PZ9qSsbhqBHntjEiKB0,2300
|
|
36
36
|
sqlalchemy/dialects/mysql/dml.py,sha256=HXJMAvimJsqvhj3UZO4vW_6LkF5RqaKbHvklAjor7yU,7645
|
|
@@ -44,7 +44,7 @@ sqlalchemy/dialects/mysql/mysqldb.py,sha256=zPHKMQbHu8bFuD7YvOJewn2axQbfwA93NZoe
|
|
|
44
44
|
sqlalchemy/dialects/mysql/provision.py,sha256=4oGkClQ8jC3YLPF54sB4kCjFc8HRTwf5zl5zftAAXGo,3474
|
|
45
45
|
sqlalchemy/dialects/mysql/pymysql.py,sha256=GUnSHd2M2uKjmN46Hheymtm26g7phEgwYOXrX0zLY8M,4083
|
|
46
46
|
sqlalchemy/dialects/mysql/pyodbc.py,sha256=072crI4qVyPhajYvHnsfFeSrNjLFVPIjBQKo5uyz5yk,4297
|
|
47
|
-
sqlalchemy/dialects/mysql/reflection.py,sha256=
|
|
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
|
|
@@ -57,7 +57,7 @@ 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=
|
|
60
|
+
sqlalchemy/dialects/postgresql/asyncpg.py,sha256=nfujNbmAjkVPPt9jhh5ZJp8QziZQJ0fMG4JNnLTdsag,40206
|
|
61
61
|
sqlalchemy/dialects/postgresql/base.py,sha256=ed49Ode09deJF3jXr8V5sSHTwVoFVq0dlvNdP3mJaBQ,178989
|
|
62
62
|
sqlalchemy/dialects/postgresql/dml.py,sha256=Pc69Le6qzmUHHb1FT5zeUSD31dWm6SBgdCAGW89cs3s,11212
|
|
63
63
|
sqlalchemy/dialects/postgresql/ext.py,sha256=1bZ--iNh2O9ym7l2gXZX48yP3yMO4dqb9RpYro2Mj2Q,16262
|
|
@@ -68,13 +68,13 @@ sqlalchemy/dialects/postgresql/operators.py,sha256=NsAaWun_tL3d_be0fs9YL6T4LPKK6
|
|
|
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=yqyx-aDFO9l2YcL9f4T5HBP_Lnt5dHsMjpuXUG8mi7A,5762
|
|
71
|
-
sqlalchemy/dialects/postgresql/psycopg.py,sha256=
|
|
72
|
-
sqlalchemy/dialects/postgresql/psycopg2.py,sha256=
|
|
71
|
+
sqlalchemy/dialects/postgresql/psycopg.py,sha256=ACkfuT87vUJEW4kJyUqDYTwlnl5u0FZFlDcvLzxNzFQ,23226
|
|
72
|
+
sqlalchemy/dialects/postgresql/psycopg2.py,sha256=DbCB1-90O8YQDaIR67RtKOjzW3nvrdHoiwnVWYv_mX4,31605
|
|
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
|
-
sqlalchemy/dialects/sqlite/aiosqlite.py,sha256=
|
|
77
|
+
sqlalchemy/dialects/sqlite/aiosqlite.py,sha256=g3qGV6jmiXabWyb3282g_Nmxtj1jThxGSe9C9yalb-U,12345
|
|
78
78
|
sqlalchemy/dialects/sqlite/base.py,sha256=lUtigjn7NdPBq831zQsLcBwdwRJqdgKM_tUaDrMElOE,96794
|
|
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
|
|
@@ -85,11 +85,11 @@ sqlalchemy/engine/__init__.py,sha256=Stb2oV6l8w65JvqEo6J4qtKoApcmOpXy3AAxQud4C1o
|
|
|
85
85
|
sqlalchemy/engine/_py_processors.py,sha256=j9i_lcYYQOYJMcsDerPxI0sVFBIlX5sqoYMdMJlgWPI,3744
|
|
86
86
|
sqlalchemy/engine/_py_row.py,sha256=wSqoUFzLOJ1f89kgDb6sJm9LUrF5LMFpXPcK1vUsKcs,3787
|
|
87
87
|
sqlalchemy/engine/_py_util.py,sha256=f2DI3AN1kv6EplelowesCVpwS8hSXNufRkZoQmJtSH8,2484
|
|
88
|
-
sqlalchemy/engine/base.py,sha256=
|
|
89
|
-
sqlalchemy/engine/characteristics.py,sha256=
|
|
88
|
+
sqlalchemy/engine/base.py,sha256=0jDuJYb1tipD-N9chnMCvd25JySJQCm8CDCt_lobmv0,122898
|
|
89
|
+
sqlalchemy/engine/characteristics.py,sha256=N3kbvw_ApMh86wb5yAGnxtPYD4YRhYMWion1H_aVZBI,4765
|
|
90
90
|
sqlalchemy/engine/create.py,sha256=mYJtOG2ZKM8sgyfjpGpamW15RDU7JXi5s6iibbJHMIs,33206
|
|
91
|
-
sqlalchemy/engine/cursor.py,sha256=
|
|
92
|
-
sqlalchemy/engine/default.py,sha256=
|
|
91
|
+
sqlalchemy/engine/cursor.py,sha256=cFq61yrw76k-QR_xNUBWuL-Zeyb14ltG-6jo2Q2iuuw,76392
|
|
92
|
+
sqlalchemy/engine/default.py,sha256=B3i9Ce3Jk64CtNaS1gnes4uCMhiQn2cMwnZh5RxR-aE,84137
|
|
93
93
|
sqlalchemy/engine/events.py,sha256=c0unNFFiHzTAvkUtXoJaxzMFMDwurBkHiiUhuN8qluc,37381
|
|
94
94
|
sqlalchemy/engine/interfaces.py,sha256=n6G7VW5kaGyBlKdCkgaDs694tfzLPOxZeboDmVaJThg,112832
|
|
95
95
|
sqlalchemy/engine/mock.py,sha256=yvpxgFmRw5G4QsHeF-ZwQGHKES-HqQOucTxFtN1uzdk,4179
|
|
@@ -101,30 +101,30 @@ sqlalchemy/engine/strategies.py,sha256=DqFSWaXJPL-29Omot9O0aOcuGL8KmCGyOvnPGDkAJ
|
|
|
101
101
|
sqlalchemy/engine/url.py,sha256=8eWkUaIUyDExOcJ2D4xJXRcn4OY1GQJ3Q2duSX6UGAg,30784
|
|
102
102
|
sqlalchemy/engine/util.py,sha256=bNirO8k1S8yOW61uNH-a9QrWtAJ9VGFgbiR0lk1lUQU,5682
|
|
103
103
|
sqlalchemy/event/__init__.py,sha256=KBrp622xojnC3FFquxa2JsMamwAbfkvzfv6Op0NKiYc,997
|
|
104
|
-
sqlalchemy/event/api.py,sha256=
|
|
104
|
+
sqlalchemy/event/api.py,sha256=DtDVgjKSorOfp9MGJ7fgMWrj4seC_hkwF4D8CW1RFZU,8226
|
|
105
105
|
sqlalchemy/event/attr.py,sha256=X8QeHGK4ioSYht1vkhc11f606_mq_t91jMNIT314ubs,20751
|
|
106
|
-
sqlalchemy/event/base.py,sha256=
|
|
106
|
+
sqlalchemy/event/base.py,sha256=XeNX-y2X2rYZqxNEnylx-_UUTYpVc4TWjLWIGjx4Jkc,15161
|
|
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
110
|
sqlalchemy/ext/associationproxy.py,sha256=5O5ANHARO8jytvqBQmOu-QjNVE4Hh3tfYquqKAj5ajs,65771
|
|
111
|
-
sqlalchemy/ext/automap.py,sha256=
|
|
111
|
+
sqlalchemy/ext/automap.py,sha256=cMs3mMXZBbfQXahxHbT3-6h5uMM--GZIcdtwhRrZoio,61589
|
|
112
112
|
sqlalchemy/ext/baked.py,sha256=H6T1il7GY84BhzPFj49UECSpZh_eBuiHomA-QIsYOYQ,17807
|
|
113
113
|
sqlalchemy/ext/compiler.py,sha256=ONPoxoKD2yUS9R2-oOhmPsA7efm-Bs0BXo7HE1dGlsU,20391
|
|
114
114
|
sqlalchemy/ext/horizontal_shard.py,sha256=wuwAPnHymln0unSBnyx-cpX0AfESKSsypaSQTYCvzDk,16750
|
|
115
|
-
sqlalchemy/ext/hybrid.py,sha256=
|
|
115
|
+
sqlalchemy/ext/hybrid.py,sha256=IYkCaPZ29gm2cPKPg0cWMkLCEqMykD8-JJTvgacGbmc,52458
|
|
116
116
|
sqlalchemy/ext/indexable.py,sha256=UkTelbydKCdKelzbv3HWFFavoET9WocKaGRPGEOVfN8,11032
|
|
117
117
|
sqlalchemy/ext/instrumentation.py,sha256=sg8ghDjdHSODFXh_jAmpgemnNX1rxCeeXEG3-PMdrNk,15707
|
|
118
118
|
sqlalchemy/ext/mutable.py,sha256=L5ZkHBGYhMaqO75Xtyrk2DBR44RDk0g6Rz2HzHH0F8Q,37355
|
|
119
119
|
sqlalchemy/ext/orderinglist.py,sha256=TGYbsGH72wEZcFNQDYDsZg9OSPuzf__P8YX8_2HtYUo,14384
|
|
120
|
-
sqlalchemy/ext/serializer.py,sha256=
|
|
120
|
+
sqlalchemy/ext/serializer.py,sha256=D0g4jMZkRk0Gjr0L-FZe81SR63h0Zs-9JzuWtT_SD7k,6140
|
|
121
121
|
sqlalchemy/ext/asyncio/__init__.py,sha256=1OqSxEyIUn7RWLGyO12F-jAUIvk1I6DXlVy80-Gvkds,1317
|
|
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
125
|
sqlalchemy/ext/asyncio/result.py,sha256=ID2eh-NHW-lnNFTxbKhje8fr-tnsucUsiw_jcpGcSPc,30409
|
|
126
|
-
sqlalchemy/ext/asyncio/scoping.py,sha256=
|
|
127
|
-
sqlalchemy/ext/asyncio/session.py,sha256=
|
|
126
|
+
sqlalchemy/ext/asyncio/scoping.py,sha256=UxHAFxtWKqA7TEozyN2h7MJyzSspTCrS-1SlgQLTExo,52608
|
|
127
|
+
sqlalchemy/ext/asyncio/session.py,sha256=mkFFC1C2mPuopz3BwkfSVTlp3vuIDc8hxiQx5ky5rvc,63103
|
|
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=1zuDQG8ezmF-XhJmAQU_lcBHiD--sL-lq20clg8t4lE,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=lVn8IZzU_Yq88you3qC8cnm4D1V9Wsf_LeEVTMX-QGc,100158
|
|
141
141
|
sqlalchemy/orm/_typing.py,sha256=DVBfpHmDVK4x1zxaGJPY2GoTrAsyR6uexv20Lzf1afc,4973
|
|
142
142
|
sqlalchemy/orm/attributes.py,sha256=wGpyY9aIxWRkL3y6qlbUgIW78rGA4X38ZhOaWI9S818,92535
|
|
143
143
|
sqlalchemy/orm/base.py,sha256=re6A8ooMxLyfCAeQfhBwwxeJQkiH7EtzzOZIVIiTPlw,27466
|
|
144
|
-
sqlalchemy/orm/bulk_persistence.py,sha256=
|
|
144
|
+
sqlalchemy/orm/bulk_persistence.py,sha256=wU204OQK-V6rJfpc3HPeMAA1X9vZg9nSNpI1zKuZtcY,70086
|
|
145
145
|
sqlalchemy/orm/clsregistry.py,sha256=29LyYiuj0qbebOpgW6DbBPNB2ikTweFQar1byCst7I0,17958
|
|
146
146
|
sqlalchemy/orm/collections.py,sha256=jpMsJGVixmrW9kfT8wevm9kpatKRqyDLcqWd7CjKPxE,52179
|
|
147
|
-
sqlalchemy/orm/context.py,sha256=
|
|
148
|
-
sqlalchemy/orm/decl_api.py,sha256=
|
|
149
|
-
sqlalchemy/orm/decl_base.py,sha256=
|
|
147
|
+
sqlalchemy/orm/context.py,sha256=pFFc-1ZjaV3aQMAO27UIh0W6NyLc30n2IbuWNprMtS8,112445
|
|
148
|
+
sqlalchemy/orm/decl_api.py,sha256=_WPKQ_vSE5k2TLtNmkaxxYmvbhZvkRMrrvCeDxdqDQE,63998
|
|
149
|
+
sqlalchemy/orm/decl_base.py,sha256=oeL7xrty2J81FyDx03dNe02BtZ-R6iYpum-BoA1rhik,82822
|
|
150
150
|
sqlalchemy/orm/dependency.py,sha256=hgjksUWhgbmgHK5GdJdiDCBgDAIGQXIrY-Tj79tbL2k,47631
|
|
151
151
|
sqlalchemy/orm/descriptor_props.py,sha256=pKtpP7H1LB_YuHRVrEYpfFZybEnUUdPwQXxduYFe2hA,37180
|
|
152
152
|
sqlalchemy/orm/dynamic.py,sha256=jksBDCOsm6EBMVParcNGuMeaAv12hX4IzouKspC-HPA,9786
|
|
@@ -156,23 +156,23 @@ 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
158
|
sqlalchemy/orm/interfaces.py,sha256=Hmf1BjbfOarZRgMlruqghR7cgH2xyugA9v5t0x-a-wU,48502
|
|
159
|
-
sqlalchemy/orm/loading.py,sha256=
|
|
159
|
+
sqlalchemy/orm/loading.py,sha256=9RacpzFOWbuKgPRWHFmyIvD4fYCLAnkpwBFASyQ2CoI,58277
|
|
160
160
|
sqlalchemy/orm/mapped_collection.py,sha256=3cneB1dfPTLrsTvKoo9_oCY2xtq4UAHfe5WSXPyqIS4,19690
|
|
161
|
-
sqlalchemy/orm/mapper.py,sha256=
|
|
162
|
-
sqlalchemy/orm/path_registry.py,sha256=
|
|
161
|
+
sqlalchemy/orm/mapper.py,sha256=bfoRzNKKnjF-CDvr2Df7HZC9TepvtuQ49LRz_fW7DGQ,171088
|
|
162
|
+
sqlalchemy/orm/path_registry.py,sha256=sJZMv_WPqUpHfQtKWaX3WYFeKBcNJ8C3wOM2mkBGkTE,25920
|
|
163
163
|
sqlalchemy/orm/persistence.py,sha256=dzyB2JOXNwQgaCbN8kh0sEz00WFePr48qf8NWVCUZH8,61701
|
|
164
|
-
sqlalchemy/orm/properties.py,sha256=
|
|
164
|
+
sqlalchemy/orm/properties.py,sha256=eDPFzxYUgdM3uWjHywnb1XW-i0tVKKyx7A2MCD31GQU,29306
|
|
165
165
|
sqlalchemy/orm/query.py,sha256=qKuFTUlbGVjs84AQ7APBY0PJhrzc2JJ1upeI658MV_o,117596
|
|
166
166
|
sqlalchemy/orm/relationships.py,sha256=dS5SY0v1MiD7iCNnAQlHaI6prUQhL5EkXT7ijc8FR8E,128644
|
|
167
|
-
sqlalchemy/orm/scoping.py,sha256=
|
|
168
|
-
sqlalchemy/orm/session.py,sha256=
|
|
169
|
-
sqlalchemy/orm/state.py,sha256=
|
|
167
|
+
sqlalchemy/orm/scoping.py,sha256=rJVc7_Lic4V00HZ-UvYFWkVpXqdrMayRmIs4fIwH1UA,78688
|
|
168
|
+
sqlalchemy/orm/session.py,sha256=aBBbHL08H-diS6UxGbySgitga6FCRWdN-EcpP3tPC4M,195261
|
|
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=
|
|
172
|
-
sqlalchemy/orm/strategy_options.py,sha256
|
|
171
|
+
sqlalchemy/orm/strategies.py,sha256=3fYRUlO61WKgxH2ZSn1kwkJyTRHZk7b9vlfCR4i1kXY,114994
|
|
172
|
+
sqlalchemy/orm/strategy_options.py,sha256=-n44NV8QX-3uWjhFMA_R_7vYy-d57gJY9snB9JeOj-w,85341
|
|
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=JdroiJ788zPjrNdLYae_bj0hsxzEDJjLbpUMwqonLCU,80728
|
|
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,31 +180,31 @@ 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=1SX6o1ezeB8C9DAa2m0WxmfhM3ji3FeCprXFQkNerNY,63048
|
|
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
|
|
187
|
-
sqlalchemy/sql/_typing.py,sha256=
|
|
187
|
+
sqlalchemy/sql/_typing.py,sha256=oqwrYHVMtK-AuKGH9c4SgfiOEJUt5vjkzSEzzscMHkM,12771
|
|
188
188
|
sqlalchemy/sql/annotation.py,sha256=aqbbVz9kfbCT3_66CZ9GEirVN197Cukoqt8rq48FgkQ,18245
|
|
189
|
-
sqlalchemy/sql/base.py,sha256=
|
|
189
|
+
sqlalchemy/sql/base.py,sha256=Lg7iHywXmB7XuRMar45XSM4KayChGhfj1c8E7nWUJdo,73899
|
|
190
190
|
sqlalchemy/sql/cache_key.py,sha256=0Db8mR8IrpBgdzXs4TGTt98LOpL3c7KABd72MAPKUQQ,33668
|
|
191
191
|
sqlalchemy/sql/coercions.py,sha256=1xzN_9U5BCJGgokdc5iYj5o2cMAfEEZkr1Oa9Q-JYj8,40493
|
|
192
|
-
sqlalchemy/sql/compiler.py,sha256=
|
|
192
|
+
sqlalchemy/sql/compiler.py,sha256=e5XWUmeZnE3O8r7fndfmXjAze3qlFZY223BHqrso0AY,274647
|
|
193
193
|
sqlalchemy/sql/crud.py,sha256=g9xcol2KRGjZi1qsb2-bVz8zgVy_53gfMtJcnNO2vyQ,56521
|
|
194
194
|
sqlalchemy/sql/ddl.py,sha256=CIqMilCKfuQnF0lrZsQdTxgrbXqcTauKr0Ojzj77PFQ,45602
|
|
195
195
|
sqlalchemy/sql/default_comparator.py,sha256=utXWsZVGEjflhFfCT4ywa6RnhORc1Rryo87Hga71Rps,16707
|
|
196
196
|
sqlalchemy/sql/dml.py,sha256=pn0Lm1ofC5qVZzwGWFW73lPCiNba8OsTeemurJgwRyg,65614
|
|
197
|
-
sqlalchemy/sql/elements.py,sha256=
|
|
197
|
+
sqlalchemy/sql/elements.py,sha256=XpfBuu4sh5W5lHHUZN95DTl4FM4MM_zs0GKqHZvdXXM,176146
|
|
198
198
|
sqlalchemy/sql/events.py,sha256=iC_Q1Htm1Aobt5tOYxWfHHqNpoytrULORmUKcusH_-E,18290
|
|
199
199
|
sqlalchemy/sql/expression.py,sha256=VMX-dLpsZYnVRJpYNDozDUgaj7iQ0HuewUKVefD57PE,7586
|
|
200
|
-
sqlalchemy/sql/functions.py,sha256=
|
|
200
|
+
sqlalchemy/sql/functions.py,sha256=kMMYplvuIHFAPwxBI03SizwaLcYEHzysecWk-R1V-JM,63762
|
|
201
201
|
sqlalchemy/sql/lambdas.py,sha256=DP0Qz7Ypo8QhzMwygGHYgRhwJMx-rNezO1euouH3iYU,49292
|
|
202
202
|
sqlalchemy/sql/naming.py,sha256=ZHs1qSV3ou8TYmZ92uvU3sfdklUQlIz4uhe330n05SU,6858
|
|
203
203
|
sqlalchemy/sql/operators.py,sha256=r4oQp4h5zTMFFOpiFNV56joIK-QIjJCobatsmaZ-724,75935
|
|
204
204
|
sqlalchemy/sql/roles.py,sha256=pOsVn_OZD7mF2gJByHf24Rjopt0_Hu3dUCEOK5t4KS8,7662
|
|
205
|
-
sqlalchemy/sql/schema.py,sha256
|
|
206
|
-
sqlalchemy/sql/selectable.py,sha256=
|
|
207
|
-
sqlalchemy/sql/sqltypes.py,sha256=
|
|
205
|
+
sqlalchemy/sql/schema.py,sha256=-5QrCcIJNbs1Et6oRzfpTDvhP4R3KbRJkGiYuJExayI,229767
|
|
206
|
+
sqlalchemy/sql/selectable.py,sha256=gAOLh2hq0xRVqAaO6ctQr9cgLgdz40iCEhCJ_Gp49cE,233587
|
|
207
|
+
sqlalchemy/sql/sqltypes.py,sha256=d3xNVCDPV2MaPInKWvIpLDGS8NwGFLP614_dWws3B_U,126808
|
|
208
208
|
sqlalchemy/sql/traversals.py,sha256=NFgJrVJzInO3HrnG90CklxrDXhFydZohPs2vRJkh3Bo,33589
|
|
209
209
|
sqlalchemy/sql/type_api.py,sha256=CJAvRix_rRoOsE77sH4BqeGX0lIdtk8dX-StjGx3mUo,83208
|
|
210
210
|
sqlalchemy/sql/util.py,sha256=qGHQF-tPCj-m1FBerzT7weCanGcXU7dK5m-W7NHio-4,48077
|
|
@@ -248,21 +248,21 @@ sqlalchemy/testing/suite/test_types.py,sha256=rFmTOg6XuMch9L2-XthfLJRCTTwpZbMfrN
|
|
|
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
250
|
sqlalchemy/util/__init__.py,sha256=B3bedg-LSQEscwqgmYYU-VENUX8_zAE3q9vb7tkfJNY,8277
|
|
251
|
-
sqlalchemy/util/_collections.py,sha256=
|
|
252
|
-
sqlalchemy/util/_concurrency_py3k.py,sha256=
|
|
251
|
+
sqlalchemy/util/_collections.py,sha256=aZoSAVOXnHBoYEsxDOi0O9odg9wqLbGb7PGjaWQKiyY,20078
|
|
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
255
|
sqlalchemy/util/compat.py,sha256=R6bpBydldtbr6h7oJePihQxFb7jKiI-YDsK465MSOzk,8714
|
|
256
256
|
sqlalchemy/util/concurrency.py,sha256=9lT_cMoO1fZNdY8QTUZ22oeSf-L5I-79Ke7chcBNPA0,3304
|
|
257
257
|
sqlalchemy/util/deprecations.py,sha256=YBwvvYhSB8LhasIZRKvg_-WNoVhPUcaYI1ZrnjDn868,11971
|
|
258
|
-
sqlalchemy/util/langhelpers.py,sha256=
|
|
258
|
+
sqlalchemy/util/langhelpers.py,sha256=5XpX5X6sqKtZ6B07WmlP2oOCbUn7CptBNVTe4LR7jqA,64957
|
|
259
259
|
sqlalchemy/util/preloaded.py,sha256=az7NmLJLsqs0mtM9uBkIu10-841RYDq8wOyqJ7xXvqE,5904
|
|
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=
|
|
264
|
-
SQLAlchemy-2.0.
|
|
265
|
-
SQLAlchemy-2.0.
|
|
266
|
-
SQLAlchemy-2.0.
|
|
267
|
-
SQLAlchemy-2.0.
|
|
268
|
-
SQLAlchemy-2.0.
|
|
263
|
+
sqlalchemy/util/typing.py,sha256=UctfgugSTnFJgZraikXJbB-5RoV7oyccZmbf2NeRfoA,16671
|
|
264
|
+
SQLAlchemy-2.0.31.dist-info/LICENSE,sha256=PA9Zq4h9BB3mpOUv_j6e212VIt6Qn66abNettue-MpM,1100
|
|
265
|
+
SQLAlchemy-2.0.31.dist-info/METADATA,sha256=Fv-yTpqMYGTC6PU1Jc8Ka1Evr74lqaBGNQCG7ALeO3g,9632
|
|
266
|
+
SQLAlchemy-2.0.31.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
|
267
|
+
SQLAlchemy-2.0.31.dist-info/top_level.txt,sha256=rp-ZgB7D8G11ivXON5VGPjupT1voYmWqkciDt5Uaw_Q,11
|
|
268
|
+
SQLAlchemy-2.0.31.dist-info/RECORD,,
|
sqlalchemy/__init__.py
CHANGED
sqlalchemy/connectors/asyncio.py
CHANGED
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
from __future__ import annotations
|
|
12
12
|
|
|
13
13
|
import collections
|
|
14
|
-
import itertools
|
|
15
14
|
|
|
16
15
|
from ..engine import AdaptedConnection
|
|
17
16
|
from ..util.concurrency import asyncio
|
|
@@ -114,11 +113,8 @@ class AsyncAdapt_dbapi_cursor:
|
|
|
114
113
|
def fetchmany(self, size=None):
|
|
115
114
|
if size is None:
|
|
116
115
|
size = self.arraysize
|
|
117
|
-
|
|
118
|
-
rr
|
|
119
|
-
retval = list(itertools.islice(rr, 0, size))
|
|
120
|
-
self._rows = collections.deque(rr)
|
|
121
|
-
return retval
|
|
116
|
+
rr = self._rows
|
|
117
|
+
return [rr.popleft() for _ in range(min(size, len(rr)))]
|
|
122
118
|
|
|
123
119
|
def fetchall(self):
|
|
124
120
|
retval = list(self._rows)
|
|
@@ -27,6 +27,8 @@ This dialect should normally be used only with the
|
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
""" # noqa
|
|
30
|
+
from collections import deque
|
|
31
|
+
|
|
30
32
|
from .pymysql import MySQLDialect_pymysql
|
|
31
33
|
from ... import pool
|
|
32
34
|
from ... import util
|
|
@@ -57,7 +59,7 @@ class AsyncAdapt_aiomysql_cursor:
|
|
|
57
59
|
|
|
58
60
|
# see https://github.com/aio-libs/aiomysql/issues/543
|
|
59
61
|
self._cursor = self.await_(cursor.__aenter__())
|
|
60
|
-
self._rows =
|
|
62
|
+
self._rows = deque()
|
|
61
63
|
|
|
62
64
|
@property
|
|
63
65
|
def description(self):
|
|
@@ -87,7 +89,7 @@ class AsyncAdapt_aiomysql_cursor:
|
|
|
87
89
|
# exhausting rows, which we already have done for sync cursor.
|
|
88
90
|
# another option would be to emulate aiosqlite dialect and assign
|
|
89
91
|
# cursor only if we are doing server side cursor operation.
|
|
90
|
-
self._rows
|
|
92
|
+
self._rows.clear()
|
|
91
93
|
|
|
92
94
|
def execute(self, operation, parameters=None):
|
|
93
95
|
return self.await_(self._execute_async(operation, parameters))
|
|
@@ -106,7 +108,7 @@ class AsyncAdapt_aiomysql_cursor:
|
|
|
106
108
|
# of that here since our default result is not async.
|
|
107
109
|
# we could just as easily grab "_rows" here and be done with it
|
|
108
110
|
# but this is safer.
|
|
109
|
-
self._rows =
|
|
111
|
+
self._rows = deque(await self._cursor.fetchall())
|
|
110
112
|
return result
|
|
111
113
|
|
|
112
114
|
async def _executemany_async(self, operation, seq_of_parameters):
|
|
@@ -118,11 +120,11 @@ class AsyncAdapt_aiomysql_cursor:
|
|
|
118
120
|
|
|
119
121
|
def __iter__(self):
|
|
120
122
|
while self._rows:
|
|
121
|
-
yield self._rows.
|
|
123
|
+
yield self._rows.popleft()
|
|
122
124
|
|
|
123
125
|
def fetchone(self):
|
|
124
126
|
if self._rows:
|
|
125
|
-
return self._rows.
|
|
127
|
+
return self._rows.popleft()
|
|
126
128
|
else:
|
|
127
129
|
return None
|
|
128
130
|
|
|
@@ -130,13 +132,12 @@ class AsyncAdapt_aiomysql_cursor:
|
|
|
130
132
|
if size is None:
|
|
131
133
|
size = self.arraysize
|
|
132
134
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
return retval
|
|
135
|
+
rr = self._rows
|
|
136
|
+
return [rr.popleft() for _ in range(min(size, len(rr)))]
|
|
136
137
|
|
|
137
138
|
def fetchall(self):
|
|
138
|
-
retval = self._rows
|
|
139
|
-
self._rows
|
|
139
|
+
retval = list(self._rows)
|
|
140
|
+
self._rows.clear()
|
|
140
141
|
return retval
|
|
141
142
|
|
|
142
143
|
|
|
@@ -25,6 +25,7 @@ This dialect should normally be used only with the
|
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
""" # noqa
|
|
28
|
+
from collections import deque
|
|
28
29
|
from contextlib import asynccontextmanager
|
|
29
30
|
|
|
30
31
|
from .pymysql import MySQLDialect_pymysql
|
|
@@ -56,7 +57,7 @@ class AsyncAdapt_asyncmy_cursor:
|
|
|
56
57
|
cursor = self._connection.cursor()
|
|
57
58
|
|
|
58
59
|
self._cursor = self.await_(cursor.__aenter__())
|
|
59
|
-
self._rows =
|
|
60
|
+
self._rows = deque()
|
|
60
61
|
|
|
61
62
|
@property
|
|
62
63
|
def description(self):
|
|
@@ -86,7 +87,7 @@ class AsyncAdapt_asyncmy_cursor:
|
|
|
86
87
|
# exhausting rows, which we already have done for sync cursor.
|
|
87
88
|
# another option would be to emulate aiosqlite dialect and assign
|
|
88
89
|
# cursor only if we are doing server side cursor operation.
|
|
89
|
-
self._rows
|
|
90
|
+
self._rows.clear()
|
|
90
91
|
|
|
91
92
|
def execute(self, operation, parameters=None):
|
|
92
93
|
return self.await_(self._execute_async(operation, parameters))
|
|
@@ -108,7 +109,7 @@ class AsyncAdapt_asyncmy_cursor:
|
|
|
108
109
|
# of that here since our default result is not async.
|
|
109
110
|
# we could just as easily grab "_rows" here and be done with it
|
|
110
111
|
# but this is safer.
|
|
111
|
-
self._rows =
|
|
112
|
+
self._rows = deque(await self._cursor.fetchall())
|
|
112
113
|
return result
|
|
113
114
|
|
|
114
115
|
async def _executemany_async(self, operation, seq_of_parameters):
|
|
@@ -120,11 +121,11 @@ class AsyncAdapt_asyncmy_cursor:
|
|
|
120
121
|
|
|
121
122
|
def __iter__(self):
|
|
122
123
|
while self._rows:
|
|
123
|
-
yield self._rows.
|
|
124
|
+
yield self._rows.popleft()
|
|
124
125
|
|
|
125
126
|
def fetchone(self):
|
|
126
127
|
if self._rows:
|
|
127
|
-
return self._rows.
|
|
128
|
+
return self._rows.popleft()
|
|
128
129
|
else:
|
|
129
130
|
return None
|
|
130
131
|
|
|
@@ -132,13 +133,12 @@ class AsyncAdapt_asyncmy_cursor:
|
|
|
132
133
|
if size is None:
|
|
133
134
|
size = self.arraysize
|
|
134
135
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
return retval
|
|
136
|
+
rr = self._rows
|
|
137
|
+
return [rr.popleft() for _ in range(min(size, len(rr)))]
|
|
138
138
|
|
|
139
139
|
def fetchall(self):
|
|
140
|
-
retval = self._rows
|
|
141
|
-
self._rows
|
|
140
|
+
retval = list(self._rows)
|
|
141
|
+
self._rows.clear()
|
|
142
142
|
return retval
|
|
143
143
|
|
|
144
144
|
|
|
@@ -505,7 +505,7 @@ class MySQLTableDefinitionParser:
|
|
|
505
505
|
#
|
|
506
506
|
# unique constraints come back as KEYs
|
|
507
507
|
kw = quotes.copy()
|
|
508
|
-
kw["on"] = "RESTRICT|CASCADE|SET NULL|NO ACTION"
|
|
508
|
+
kw["on"] = "RESTRICT|CASCADE|SET NULL|NO ACTION|SET DEFAULT"
|
|
509
509
|
self._re_fk_constraint = _re_compile(
|
|
510
510
|
r" "
|
|
511
511
|
r"CONSTRAINT +"
|
|
@@ -171,7 +171,7 @@ client using this setting passed to :func:`_asyncio.create_async_engine`::
|
|
|
171
171
|
|
|
172
172
|
from __future__ import annotations
|
|
173
173
|
|
|
174
|
-
import
|
|
174
|
+
from collections import deque
|
|
175
175
|
import decimal
|
|
176
176
|
import json as _py_json
|
|
177
177
|
import re
|
|
@@ -487,7 +487,7 @@ class AsyncAdapt_asyncpg_cursor:
|
|
|
487
487
|
def __init__(self, adapt_connection):
|
|
488
488
|
self._adapt_connection = adapt_connection
|
|
489
489
|
self._connection = adapt_connection._connection
|
|
490
|
-
self._rows =
|
|
490
|
+
self._rows = deque()
|
|
491
491
|
self._cursor = None
|
|
492
492
|
self.description = None
|
|
493
493
|
self.arraysize = 1
|
|
@@ -495,7 +495,7 @@ class AsyncAdapt_asyncpg_cursor:
|
|
|
495
495
|
self._invalidate_schema_cache_asof = 0
|
|
496
496
|
|
|
497
497
|
def close(self):
|
|
498
|
-
self._rows
|
|
498
|
+
self._rows.clear()
|
|
499
499
|
|
|
500
500
|
def _handle_exception(self, error):
|
|
501
501
|
self._adapt_connection._handle_exception(error)
|
|
@@ -535,7 +535,7 @@ class AsyncAdapt_asyncpg_cursor:
|
|
|
535
535
|
self._cursor = await prepared_stmt.cursor(*parameters)
|
|
536
536
|
self.rowcount = -1
|
|
537
537
|
else:
|
|
538
|
-
self._rows = await prepared_stmt.fetch(*parameters)
|
|
538
|
+
self._rows = deque(await prepared_stmt.fetch(*parameters))
|
|
539
539
|
status = prepared_stmt.get_statusmsg()
|
|
540
540
|
|
|
541
541
|
reg = re.match(
|
|
@@ -583,11 +583,11 @@ class AsyncAdapt_asyncpg_cursor:
|
|
|
583
583
|
|
|
584
584
|
def __iter__(self):
|
|
585
585
|
while self._rows:
|
|
586
|
-
yield self._rows.
|
|
586
|
+
yield self._rows.popleft()
|
|
587
587
|
|
|
588
588
|
def fetchone(self):
|
|
589
589
|
if self._rows:
|
|
590
|
-
return self._rows.
|
|
590
|
+
return self._rows.popleft()
|
|
591
591
|
else:
|
|
592
592
|
return None
|
|
593
593
|
|
|
@@ -595,13 +595,12 @@ class AsyncAdapt_asyncpg_cursor:
|
|
|
595
595
|
if size is None:
|
|
596
596
|
size = self.arraysize
|
|
597
597
|
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
return retval
|
|
598
|
+
rr = self._rows
|
|
599
|
+
return [rr.popleft() for _ in range(min(size, len(rr)))]
|
|
601
600
|
|
|
602
601
|
def fetchall(self):
|
|
603
|
-
retval = self._rows
|
|
604
|
-
self._rows
|
|
602
|
+
retval = list(self._rows)
|
|
603
|
+
self._rows.clear()
|
|
605
604
|
return retval
|
|
606
605
|
|
|
607
606
|
|
|
@@ -611,23 +610,21 @@ class AsyncAdapt_asyncpg_ss_cursor(AsyncAdapt_asyncpg_cursor):
|
|
|
611
610
|
|
|
612
611
|
def __init__(self, adapt_connection):
|
|
613
612
|
super().__init__(adapt_connection)
|
|
614
|
-
self._rowbuffer =
|
|
613
|
+
self._rowbuffer = deque()
|
|
615
614
|
|
|
616
615
|
def close(self):
|
|
617
616
|
self._cursor = None
|
|
618
|
-
self._rowbuffer
|
|
617
|
+
self._rowbuffer.clear()
|
|
619
618
|
|
|
620
619
|
def _buffer_rows(self):
|
|
620
|
+
assert self._cursor is not None
|
|
621
621
|
new_rows = self._adapt_connection.await_(self._cursor.fetch(50))
|
|
622
|
-
self._rowbuffer
|
|
622
|
+
self._rowbuffer.extend(new_rows)
|
|
623
623
|
|
|
624
624
|
def __aiter__(self):
|
|
625
625
|
return self
|
|
626
626
|
|
|
627
627
|
async def __anext__(self):
|
|
628
|
-
if not self._rowbuffer:
|
|
629
|
-
self._buffer_rows()
|
|
630
|
-
|
|
631
628
|
while True:
|
|
632
629
|
while self._rowbuffer:
|
|
633
630
|
yield self._rowbuffer.popleft()
|
|
@@ -650,21 +647,19 @@ class AsyncAdapt_asyncpg_ss_cursor(AsyncAdapt_asyncpg_cursor):
|
|
|
650
647
|
if not self._rowbuffer:
|
|
651
648
|
self._buffer_rows()
|
|
652
649
|
|
|
653
|
-
|
|
654
|
-
|
|
650
|
+
assert self._cursor is not None
|
|
651
|
+
rb = self._rowbuffer
|
|
652
|
+
lb = len(rb)
|
|
655
653
|
if size > lb:
|
|
656
|
-
|
|
654
|
+
rb.extend(
|
|
657
655
|
self._adapt_connection.await_(self._cursor.fetch(size - lb))
|
|
658
656
|
)
|
|
659
657
|
|
|
660
|
-
|
|
661
|
-
self._rowbuffer = collections.deque(buf[size:])
|
|
662
|
-
return result
|
|
658
|
+
return [rb.popleft() for _ in range(min(size, len(rb)))]
|
|
663
659
|
|
|
664
660
|
def fetchall(self):
|
|
665
|
-
ret = list(self._rowbuffer)
|
|
666
|
-
|
|
667
|
-
)
|
|
661
|
+
ret = list(self._rowbuffer)
|
|
662
|
+
ret.extend(self._adapt_connection.await_(self._all()))
|
|
668
663
|
self._rowbuffer.clear()
|
|
669
664
|
return ret
|
|
670
665
|
|