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.
Files changed (53) hide show
  1. {SQLAlchemy-2.0.29.dist-info → SQLAlchemy-2.0.31.dist-info}/METADATA +2 -2
  2. {SQLAlchemy-2.0.29.dist-info → SQLAlchemy-2.0.31.dist-info}/RECORD +53 -53
  3. sqlalchemy/__init__.py +1 -1
  4. sqlalchemy/connectors/asyncio.py +2 -6
  5. sqlalchemy/dialects/mysql/aiomysql.py +11 -10
  6. sqlalchemy/dialects/mysql/asyncmy.py +10 -10
  7. sqlalchemy/dialects/mysql/reflection.py +1 -1
  8. sqlalchemy/dialects/postgresql/asyncpg.py +21 -26
  9. sqlalchemy/dialects/postgresql/psycopg.py +41 -14
  10. sqlalchemy/dialects/postgresql/psycopg2.py +1 -1
  11. sqlalchemy/dialects/sqlite/aiosqlite.py +10 -10
  12. sqlalchemy/engine/base.py +3 -7
  13. sqlalchemy/engine/characteristics.py +76 -2
  14. sqlalchemy/engine/cursor.py +13 -10
  15. sqlalchemy/engine/default.py +9 -4
  16. sqlalchemy/event/api.py +1 -1
  17. sqlalchemy/event/base.py +7 -0
  18. sqlalchemy/ext/asyncio/scoping.py +1 -1
  19. sqlalchemy/ext/asyncio/session.py +1 -1
  20. sqlalchemy/ext/automap.py +93 -60
  21. sqlalchemy/ext/hybrid.py +1 -1
  22. sqlalchemy/ext/serializer.py +19 -23
  23. sqlalchemy/orm/_orm_constructors.py +31 -0
  24. sqlalchemy/orm/bulk_persistence.py +7 -0
  25. sqlalchemy/orm/context.py +16 -4
  26. sqlalchemy/orm/decl_api.py +22 -14
  27. sqlalchemy/orm/decl_base.py +34 -6
  28. sqlalchemy/orm/loading.py +32 -15
  29. sqlalchemy/orm/mapper.py +2 -1
  30. sqlalchemy/orm/path_registry.py +14 -11
  31. sqlalchemy/orm/properties.py +1 -1
  32. sqlalchemy/orm/scoping.py +1 -1
  33. sqlalchemy/orm/session.py +73 -21
  34. sqlalchemy/orm/state.py +13 -6
  35. sqlalchemy/orm/strategies.py +28 -4
  36. sqlalchemy/orm/strategy_options.py +19 -5
  37. sqlalchemy/orm/util.py +4 -2
  38. sqlalchemy/sql/_elements_constructors.py +14 -7
  39. sqlalchemy/sql/_typing.py +5 -2
  40. sqlalchemy/sql/base.py +18 -13
  41. sqlalchemy/sql/compiler.py +8 -3
  42. sqlalchemy/sql/elements.py +110 -33
  43. sqlalchemy/sql/functions.py +4 -1
  44. sqlalchemy/sql/schema.py +52 -6
  45. sqlalchemy/sql/selectable.py +47 -24
  46. sqlalchemy/sql/sqltypes.py +24 -6
  47. sqlalchemy/util/_collections.py +3 -3
  48. sqlalchemy/util/_concurrency_py3k.py +22 -24
  49. sqlalchemy/util/langhelpers.py +11 -12
  50. sqlalchemy/util/typing.py +1 -1
  51. {SQLAlchemy-2.0.29.dist-info → SQLAlchemy-2.0.31.dist-info}/LICENSE +0 -0
  52. {SQLAlchemy-2.0.29.dist-info → SQLAlchemy-2.0.31.dist-info}/WHEEL +0 -0
  53. {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.29
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=owmzhSxMolvrT3bYkj_lq9LeW-EtHTYPNOA7wlSVBxE,13033
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=6s4hDYfuMjJ9KbJ4s7bF1fp5DmcgV77ozgZ5-bwZ0wc,5955
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=67JrSUD1BmN88k_ASk6GvrttZFQiFjDY0wBiwdllxMk,9964
33
- sqlalchemy/dialects/mysql/asyncmy.py,sha256=CGILIRKf_2Ut9Ng2yBlmdg62laL-ockEm6GMuN7xlKE,10033
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=XXM8AGpaRTqDvuObg89Bzn_4h2ETG03viYBpWZJM3vc,22822
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=e4Zv7hTb8OdwfvrM_B82GXgORBJeNQ2vChVfogvN7KI,40240
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=TF53axr1EkTBAZD85JCq6wA7XTcJTzXueSz26txDbgc,22364
72
- sqlalchemy/dialects/postgresql/psycopg2.py,sha256=gAP3poHDUxEB6iut6sxe9PhBiOrV_iIMvnP0NUlC-Rw,31607
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=OMvxP2eWyqk5beF-sHhzxRmjzO4VCQp55q7NH2XPVTE,12305
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=Qd4VraoFmbOsjDhkH4bHlKy7oHWO_-gtWPVSZBBigko,123050
89
- sqlalchemy/engine/characteristics.py,sha256=Qbvt4CPrggJ3GfxHl0hOAxopjnCQy-W_pjtwLIe-Q1g,2590
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=I3loUjkAuT1A0NR91wGRcR2xMDmHny4MN6jJ0jeTgOI,76314
92
- sqlalchemy/engine/default.py,sha256=Acz1kPQfI86lIN9TZOen2YiZHtb90jyhgCiTonqDOKs,83993
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=BUTAZjSlzvq4Hn2v2pihP_P1yo3lvCVDczK8lV_XJ80,8227
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=3n9FmUkcXYHHyGzfpjKDsrIUVCNST_hq4zOtrNm0_a4,14954
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=UAJorfaoKJd9t9hylQMuxprSbOYE3gEZTM4wWM-z364,61576
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=LXph2NOtBQj6rZMi5ar-WCxkY7qaFp-o-UFIvCy-ep0,52432
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=YemanWdeMVUDweHCnQc-iMO6mVVXNo2qQ5NK0Eb2_Es,6178
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=BmE1UbFV_C4BXB4WngJc523DeMH-nTchNb8ORiSPYfE,52597
127
- sqlalchemy/ext/asyncio/session.py,sha256=ZZklu124Rm2p9B5pbcDbR0zVyEuq-rn69_ltByuKNXo,63092
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=tlTZoY87CFSBpnw7iIYKTCeofjLg-r2ibfCfMfbyEMU,99461
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=SSSR0Omv8A8BzpsOdSo4x75XICoqGpO1sUkyEWUVGso,70022
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=Wjx0d1Rkxd-wsX1mP2V2_4VbOxdNY6S_HijdXJ-TtKg,112001
148
- sqlalchemy/orm/decl_api.py,sha256=0gCZWM2sOXb_4OzUXfevVUisZWOUrErQTAHyaSQQL5k,63674
149
- sqlalchemy/orm/decl_base.py,sha256=Tq6I3Jm3bkM01mmoiHfdFXLE94YDk1ik2u2dXL1RxLc,81601
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=JN2zLnPjNnk7K9DERbyerxESCXin7m7X1XP0gfdWLOE,57537
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=8SVHr7tO-DDNpNGi68usc7PLQ7mTwzkZNEJu1aMb6dQ,171059
162
- sqlalchemy/orm/path_registry.py,sha256=bIXllBRevK7Ic5irajYnZgl2iazJ0rKNRkhXJSlfxjY,25850
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=p53b3_Ht4BUsNQV1BIyH34k4EZ4NkU0rr6yhWwra_Pg,29294
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=gFYywLeMmd5qjFdVPzeuCX727mTaChrCv8aqn4wPke0,78677
168
- sqlalchemy/orm/session.py,sha256=yiKyoJBARQj4I1ZBjsIxc6ecCpt2Upjvlxruo2A5HRc,193181
169
- sqlalchemy/orm/state.py,sha256=mW2f1hMSNeTJ89foutOE1EqLLD6DZkrSeO-pgagZweg,37520
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=OtmMtWpCDk4ZiaM_ipzGn80sPOi6Opwj3Co4lUHpd_w,114206
172
- sqlalchemy/orm/strategy_options.py,sha256=I27ufNeElVQ4HBn8V4357CkUm47aEwWRlg4CONzsUEQ,84563
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=PvU_J4PSNcaOoNnsLY9qZ0lcElG71ykvdZSDZ76WSwg,80660
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=B0un-BtCNRhLbB3Fucn9G7iyOJWTq50xLQoJgrZlEJU,62587
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=9XLEtzzsUzzU4syTzbmycGhYPGLqXDmTDwaARSNR3-g,12713
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=liRt7TSAAIo1wOUUrvsqbq6X_bSX2EpxxSUd4v7w_pY,73797
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=elYp6JY7oOEM6IFdLbCYfEB2lZliX---vtOumb43Ym8,274503
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=ihsDePoVV_rAieJV6po5Z2GVl_exszmxwJ2JcB_LxbU,173693
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=MjXK0IVv45Y4n96_TMDZGJ7fwAhGHPRbFP8hOJgaplQ,63689
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=BHkkganu-uinWZFHKPbsCwV_9gqsq449S6RQAC2MZoE,228317
206
- sqlalchemy/sql/selectable.py,sha256=7lxe79hZvnHyzHe1DobodI1lZ1eo8quSLZ6phw10Zj4,232848
207
- sqlalchemy/sql/sqltypes.py,sha256=AAXED0rebCNmrY8K8kL6zox8_GD0L_p0lRzwM3SxCGk,126076
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=NE9dGJo8UNXIMbY3l3k8AO9BdPW04DlKTYraKCinchI,20063
252
- sqlalchemy/util/_concurrency_py3k.py,sha256=IBxZDTSyLbEx9I9ViQVXYP1twxM-pTa-3x_-U8snmLU,9191
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=vm_lYcRNPyURzIOVhoXaScFoQy8PU0rLuztIVwTwTmc,64957
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=FqH6WjV3p-8rz68YaXktpiZrPu3kmug2-gktJxBQSnI,16641
264
- SQLAlchemy-2.0.29.dist-info/LICENSE,sha256=PA9Zq4h9BB3mpOUv_j6e212VIt6Qn66abNettue-MpM,1100
265
- SQLAlchemy-2.0.29.dist-info/METADATA,sha256=Ldn7XpjIKE-erVf--HTU-157JH2xpMOomy6IxhmGmPE,9602
266
- SQLAlchemy-2.0.29.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
267
- SQLAlchemy-2.0.29.dist-info/top_level.txt,sha256=rp-ZgB7D8G11ivXON5VGPjupT1voYmWqkciDt5Uaw_Q,11
268
- SQLAlchemy-2.0.29.dist-info/RECORD,,
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
@@ -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.29"
272
+ __version__ = "2.0.31"
273
273
 
274
274
 
275
275
  def __go(lcls: Any) -> None:
@@ -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 = iter(self._rows)
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 = list(await self._cursor.fetchall())
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.pop(0)
123
+ yield self._rows.popleft()
122
124
 
123
125
  def fetchone(self):
124
126
  if self._rows:
125
- return self._rows.pop(0)
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
- retval = self._rows[0:size]
134
- self._rows[:] = self._rows[size:]
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 = list(await self._cursor.fetchall())
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.pop(0)
124
+ yield self._rows.popleft()
124
125
 
125
126
  def fetchone(self):
126
127
  if self._rows:
127
- return self._rows.pop(0)
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
- retval = self._rows[0:size]
136
- self._rows[:] = self._rows[size:]
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 collections
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.pop(0)
586
+ yield self._rows.popleft()
587
587
 
588
588
  def fetchone(self):
589
589
  if self._rows:
590
- return self._rows.pop(0)
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
- retval = self._rows[0:size]
599
- self._rows[:] = self._rows[size:]
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 = None
613
+ self._rowbuffer = deque()
615
614
 
616
615
  def close(self):
617
616
  self._cursor = None
618
- self._rowbuffer = None
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 = collections.deque(new_rows)
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
- buf = list(self._rowbuffer)
654
- lb = len(buf)
650
+ assert self._cursor is not None
651
+ rb = self._rowbuffer
652
+ lb = len(rb)
655
653
  if size > lb:
656
- buf.extend(
654
+ rb.extend(
657
655
  self._adapt_connection.await_(self._cursor.fetch(size - lb))
658
656
  )
659
657
 
660
- result = buf[0:size]
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) + list(
666
- self._adapt_connection.await_(self._all())
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