SQLAlchemy 2.0.30__py3-none-any.whl → 2.0.32__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 (66) hide show
  1. {SQLAlchemy-2.0.30.dist-info → SQLAlchemy-2.0.32.dist-info}/METADATA +33 -33
  2. {SQLAlchemy-2.0.30.dist-info → SQLAlchemy-2.0.32.dist-info}/RECORD +66 -66
  3. {SQLAlchemy-2.0.30.dist-info → SQLAlchemy-2.0.32.dist-info}/WHEEL +1 -1
  4. sqlalchemy/__init__.py +1 -1
  5. sqlalchemy/connectors/asyncio.py +10 -1
  6. sqlalchemy/dialects/mssql/base.py +4 -0
  7. sqlalchemy/dialects/mysql/aiomysql.py +11 -10
  8. sqlalchemy/dialects/mysql/asyncmy.py +10 -10
  9. sqlalchemy/dialects/mysql/base.py +2 -0
  10. sqlalchemy/dialects/mysql/reflection.py +1 -1
  11. sqlalchemy/dialects/oracle/base.py +36 -4
  12. sqlalchemy/dialects/oracle/cx_oracle.py +5 -14
  13. sqlalchemy/dialects/oracle/oracledb.py +123 -3
  14. sqlalchemy/dialects/postgresql/asyncpg.py +21 -26
  15. sqlalchemy/dialects/postgresql/provision.py +1 -1
  16. sqlalchemy/dialects/postgresql/psycopg.py +9 -14
  17. sqlalchemy/dialects/postgresql/psycopg2.py +33 -23
  18. sqlalchemy/dialects/sqlite/aiosqlite.py +10 -10
  19. sqlalchemy/dialects/sqlite/base.py +19 -1
  20. sqlalchemy/engine/base.py +2 -0
  21. sqlalchemy/engine/default.py +19 -2
  22. sqlalchemy/engine/interfaces.py +10 -2
  23. sqlalchemy/event/base.py +47 -39
  24. sqlalchemy/ext/asyncio/scoping.py +1 -1
  25. sqlalchemy/ext/asyncio/session.py +1 -1
  26. sqlalchemy/ext/mypy/util.py +20 -1
  27. sqlalchemy/ext/serializer.py +19 -23
  28. sqlalchemy/orm/_orm_constructors.py +43 -2
  29. sqlalchemy/orm/attributes.py +1 -1
  30. sqlalchemy/orm/bulk_persistence.py +29 -1
  31. sqlalchemy/orm/collections.py +5 -3
  32. sqlalchemy/orm/decl_base.py +34 -6
  33. sqlalchemy/orm/descriptor_props.py +3 -1
  34. sqlalchemy/orm/dynamic.py +6 -4
  35. sqlalchemy/orm/mapped_collection.py +12 -15
  36. sqlalchemy/orm/query.py +1 -1
  37. sqlalchemy/orm/scoping.py +1 -1
  38. sqlalchemy/orm/session.py +12 -1
  39. sqlalchemy/orm/state.py +13 -6
  40. sqlalchemy/orm/strategies.py +39 -4
  41. sqlalchemy/orm/strategy_options.py +4 -4
  42. sqlalchemy/orm/util.py +5 -3
  43. sqlalchemy/sql/base.py +1 -1
  44. sqlalchemy/sql/coercions.py +40 -24
  45. sqlalchemy/sql/compiler.py +5 -3
  46. sqlalchemy/sql/crud.py +1 -1
  47. sqlalchemy/sql/elements.py +78 -19
  48. sqlalchemy/sql/operators.py +6 -0
  49. sqlalchemy/sql/schema.py +23 -14
  50. sqlalchemy/sql/selectable.py +46 -21
  51. sqlalchemy/sql/sqltypes.py +36 -13
  52. sqlalchemy/sql/traversals.py +2 -0
  53. sqlalchemy/sql/type_api.py +22 -7
  54. sqlalchemy/testing/__init__.py +1 -0
  55. sqlalchemy/testing/fixtures/sql.py +12 -2
  56. sqlalchemy/testing/requirements.py +25 -0
  57. sqlalchemy/testing/suite/test_results.py +43 -9
  58. sqlalchemy/testing/suite/test_select.py +111 -0
  59. sqlalchemy/testing/suite/test_types.py +70 -0
  60. sqlalchemy/testing/util.py +18 -0
  61. sqlalchemy/util/_collections.py +3 -3
  62. sqlalchemy/util/_concurrency_py3k.py +22 -24
  63. sqlalchemy/util/compat.py +1 -1
  64. sqlalchemy/util/langhelpers.py +10 -0
  65. {SQLAlchemy-2.0.30.dist-info → SQLAlchemy-2.0.32.dist-info}/LICENSE +0 -0
  66. {SQLAlchemy-2.0.30.dist-info → SQLAlchemy-2.0.32.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.30
3
+ Version: 2.0.32
4
4
  Summary: Database Abstraction Library
5
5
  Home-page: https://www.sqlalchemy.org
6
6
  Author: Mike Bayer
@@ -26,61 +26,61 @@ Classifier: Topic :: Database :: Front-Ends
26
26
  Requires-Python: >=3.7
27
27
  Description-Content-Type: text/x-rst
28
28
  License-File: LICENSE
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")))))
31
- Requires-Dist: importlib-metadata ; python_version < "3.8"
29
+ Requires-Dist: typing-extensions>=4.6.0
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
+ Requires-Dist: importlib-metadata; python_version < "3.8"
32
32
  Provides-Extra: aiomysql
33
- Requires-Dist: greenlet !=0.4.17 ; extra == 'aiomysql'
34
- Requires-Dist: aiomysql >=0.2.0 ; extra == 'aiomysql'
33
+ Requires-Dist: greenlet!=0.4.17; extra == "aiomysql"
34
+ Requires-Dist: aiomysql>=0.2.0; extra == "aiomysql"
35
35
  Provides-Extra: aioodbc
36
- Requires-Dist: greenlet !=0.4.17 ; extra == 'aioodbc'
37
- Requires-Dist: aioodbc ; extra == 'aioodbc'
36
+ Requires-Dist: greenlet!=0.4.17; extra == "aioodbc"
37
+ Requires-Dist: aioodbc; extra == "aioodbc"
38
38
  Provides-Extra: aiosqlite
39
- Requires-Dist: greenlet !=0.4.17 ; extra == 'aiosqlite'
40
- Requires-Dist: aiosqlite ; extra == 'aiosqlite'
41
- Requires-Dist: typing-extensions !=3.10.0.1 ; extra == 'aiosqlite'
39
+ Requires-Dist: greenlet!=0.4.17; extra == "aiosqlite"
40
+ Requires-Dist: aiosqlite; extra == "aiosqlite"
41
+ Requires-Dist: typing-extensions!=3.10.0.1; extra == "aiosqlite"
42
42
  Provides-Extra: asyncio
43
- Requires-Dist: greenlet !=0.4.17 ; extra == 'asyncio'
43
+ Requires-Dist: greenlet!=0.4.17; extra == "asyncio"
44
44
  Provides-Extra: asyncmy
45
- Requires-Dist: greenlet !=0.4.17 ; extra == 'asyncmy'
46
- Requires-Dist: asyncmy !=0.2.4,!=0.2.6,>=0.2.3 ; extra == 'asyncmy'
45
+ Requires-Dist: greenlet!=0.4.17; extra == "asyncmy"
46
+ Requires-Dist: asyncmy!=0.2.4,!=0.2.6,>=0.2.3; extra == "asyncmy"
47
47
  Provides-Extra: mariadb_connector
48
- Requires-Dist: mariadb !=1.1.2,!=1.1.5,>=1.0.1 ; extra == 'mariadb_connector'
48
+ Requires-Dist: mariadb!=1.1.2,!=1.1.5,>=1.0.1; extra == "mariadb-connector"
49
49
  Provides-Extra: mssql
50
- Requires-Dist: pyodbc ; extra == 'mssql'
50
+ Requires-Dist: pyodbc; extra == "mssql"
51
51
  Provides-Extra: mssql_pymssql
52
- Requires-Dist: pymssql ; extra == 'mssql_pymssql'
52
+ Requires-Dist: pymssql; extra == "mssql-pymssql"
53
53
  Provides-Extra: mssql_pyodbc
54
- Requires-Dist: pyodbc ; extra == 'mssql_pyodbc'
54
+ Requires-Dist: pyodbc; extra == "mssql-pyodbc"
55
55
  Provides-Extra: mypy
56
- Requires-Dist: mypy >=0.910 ; extra == 'mypy'
56
+ Requires-Dist: mypy>=0.910; extra == "mypy"
57
57
  Provides-Extra: mysql
58
- Requires-Dist: mysqlclient >=1.4.0 ; extra == 'mysql'
58
+ Requires-Dist: mysqlclient>=1.4.0; extra == "mysql"
59
59
  Provides-Extra: mysql_connector
60
- Requires-Dist: mysql-connector-python ; extra == 'mysql_connector'
60
+ Requires-Dist: mysql-connector-python; extra == "mysql-connector"
61
61
  Provides-Extra: oracle
62
- Requires-Dist: cx-oracle >=8 ; extra == 'oracle'
62
+ Requires-Dist: cx-oracle>=8; extra == "oracle"
63
63
  Provides-Extra: oracle_oracledb
64
- Requires-Dist: oracledb >=1.0.1 ; extra == 'oracle_oracledb'
64
+ Requires-Dist: oracledb>=1.0.1; extra == "oracle-oracledb"
65
65
  Provides-Extra: postgresql
66
- Requires-Dist: psycopg2 >=2.7 ; extra == 'postgresql'
66
+ Requires-Dist: psycopg2>=2.7; extra == "postgresql"
67
67
  Provides-Extra: postgresql_asyncpg
68
- Requires-Dist: greenlet !=0.4.17 ; extra == 'postgresql_asyncpg'
69
- Requires-Dist: asyncpg ; extra == 'postgresql_asyncpg'
68
+ Requires-Dist: greenlet!=0.4.17; extra == "postgresql-asyncpg"
69
+ Requires-Dist: asyncpg; extra == "postgresql-asyncpg"
70
70
  Provides-Extra: postgresql_pg8000
71
- Requires-Dist: pg8000 >=1.29.1 ; extra == 'postgresql_pg8000'
71
+ Requires-Dist: pg8000>=1.29.1; extra == "postgresql-pg8000"
72
72
  Provides-Extra: postgresql_psycopg
73
- Requires-Dist: psycopg >=3.0.7 ; extra == 'postgresql_psycopg'
73
+ Requires-Dist: psycopg>=3.0.7; extra == "postgresql-psycopg"
74
74
  Provides-Extra: postgresql_psycopg2binary
75
- Requires-Dist: psycopg2-binary ; extra == 'postgresql_psycopg2binary'
75
+ Requires-Dist: psycopg2-binary; extra == "postgresql-psycopg2binary"
76
76
  Provides-Extra: postgresql_psycopg2cffi
77
- Requires-Dist: psycopg2cffi ; extra == 'postgresql_psycopg2cffi'
77
+ Requires-Dist: psycopg2cffi; extra == "postgresql-psycopg2cffi"
78
78
  Provides-Extra: postgresql_psycopgbinary
79
- Requires-Dist: psycopg[binary] >=3.0.7 ; extra == 'postgresql_psycopgbinary'
79
+ Requires-Dist: psycopg[binary]>=3.0.7; extra == "postgresql-psycopgbinary"
80
80
  Provides-Extra: pymysql
81
- Requires-Dist: pymysql ; extra == 'pymysql'
81
+ Requires-Dist: pymysql; extra == "pymysql"
82
82
  Provides-Extra: sqlcipher
83
- Requires-Dist: sqlcipher3-binary ; extra == 'sqlcipher'
83
+ Requires-Dist: sqlcipher3-binary; extra == "sqlcipher"
84
84
 
85
85
  SQLAlchemy
86
86
  ==========
@@ -1,4 +1,4 @@
1
- sqlalchemy/__init__.py,sha256=yI12J_Tdp5kmBfaR8P8wQjcZg4U0qua6pbbB7JTvCsw,13033
1
+ sqlalchemy/__init__.py,sha256=i0mVxtnBs8TF20PbrQJe7ftldXr46Jp4MmWaCO0F8Pw,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=K3U5857TD0GmJXIhxgRljKnJhJNzYFhQ8UjyFX0Yyoo,5878
11
+ sqlalchemy/connectors/asyncio.py,sha256=Hq2bkXmG6-KO_RfCrwMqx4oGH-uH1Z1WWKqPWNjz8p4,6138
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
@@ -22,16 +22,16 @@ 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=87Z8bQbA8q5_T2Oyd4tUuttWNjYTQD9Dhq-eplDJcY4,132301
25
+ sqlalchemy/dialects/mssql/base.py,sha256=TQekFOsor8Rc-cnDPmbq_JLQekKrHPtUdBdNsCYFw7w,132447
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=RTVbgYLFAHzEnpVQDJroU8ji_10MqBTiZfyP9_-QNT4,5362
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
34
- sqlalchemy/dialects/mysql/base.py,sha256=KA7tvRxKUw0KwHwMth2rz-NWV0xMkVbYvPoBM9wrAFw,120850
32
+ sqlalchemy/dialects/mysql/aiomysql.py,sha256=-oMZnCqNsSki8mlQRTWIwiQPT1OVdZIuANkb90q8LAs,9999
33
+ sqlalchemy/dialects/mysql/asyncmy.py,sha256=YpuuOh8VknEeqHqUXQGfQ3jhfO3Xb-vZv78Jq5cscJ0,10067
34
+ sqlalchemy/dialects/mysql/base.py,sha256=1iN5wVw52gDRi5go-q6YsX8vCPwW-Mkd3ej3rrX2ai8,120957
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
@@ -44,20 +44,20 @@ 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
51
- sqlalchemy/dialects/oracle/base.py,sha256=-7b5iubFPxJyDRoLXlxj8rk8eBRN2_IdZlB2zzzrrbw,118246
52
- sqlalchemy/dialects/oracle/cx_oracle.py,sha256=t5yH4svVz7xoDSITF958blgZ01hbCUEWUKrAXwiCiAE,55566
51
+ sqlalchemy/dialects/oracle/base.py,sha256=cav9QxSLT75-JXhhFSneYT_y3coF6TmFkBa5fqQMrRI,119615
52
+ sqlalchemy/dialects/oracle/cx_oracle.py,sha256=QcbM3I6ixtEqTdTMjik8IASE43dAE9LUzs-2g_Q_J4w,55258
53
53
  sqlalchemy/dialects/oracle/dictionary.py,sha256=7WMrbPkqo8ZdGjaEZyQr-5f2pajSOF1OTGb8P97z8-g,19519
54
- sqlalchemy/dialects/oracle/oracledb.py,sha256=UFcZwrrk0pWfAp_SKJZ1B5rIQHtNhOvuu73_JaSnTbI,9487
54
+ sqlalchemy/dialects/oracle/oracledb.py,sha256=fZRKGqNIwW9LG4i8yDOXABrucbfzn_yC86Od-BJ3PcM,13619
55
55
  sqlalchemy/dialects/oracle/provision.py,sha256=O9ZpF4OG6Cx4mMzLRfZwhs8dZjrJETWR402n9c7726A,8304
56
56
  sqlalchemy/dialects/oracle/types.py,sha256=QK3hJvWzKnnCe3oD3rItwEEIwcoBze8qGg7VFOvVlIk,8231
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
@@ -67,15 +67,15 @@ sqlalchemy/dialects/postgresql/named_types.py,sha256=3IV1ufo7zJjKmX4VtGDEnoXE6xE
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
- sqlalchemy/dialects/postgresql/provision.py,sha256=yqyx-aDFO9l2YcL9f4T5HBP_Lnt5dHsMjpuXUG8mi7A,5762
71
- sqlalchemy/dialects/postgresql/psycopg.py,sha256=3_xRoZ71mgTR-tYKDb6N0ebbrRD3dFwVRI5-ZuFFOg8,23378
72
- sqlalchemy/dialects/postgresql/psycopg2.py,sha256=DbCB1-90O8YQDaIR67RtKOjzW3nvrdHoiwnVWYv_mX4,31605
70
+ sqlalchemy/dialects/postgresql/provision.py,sha256=t6TZj0XaWG9zrpCjNr0oJRjAC_WQzaNdp3kaKJIbS8I,5770
71
+ sqlalchemy/dialects/postgresql/psycopg.py,sha256=ACkfuT87vUJEW4kJyUqDYTwlnl5u0FZFlDcvLzxNzFQ,23226
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
- sqlalchemy/dialects/sqlite/aiosqlite.py,sha256=OMvxP2eWyqk5beF-sHhzxRmjzO4VCQp55q7NH2XPVTE,12305
78
- sqlalchemy/dialects/sqlite/base.py,sha256=lUtigjn7NdPBq831zQsLcBwdwRJqdgKM_tUaDrMElOE,96794
77
+ sqlalchemy/dialects/sqlite/aiosqlite.py,sha256=g3qGV6jmiXabWyb3282g_Nmxtj1jThxGSe9C9yalb-U,12345
78
+ sqlalchemy/dialects/sqlite/base.py,sha256=GmDZ7DRgXVXWjx5BKSZgGzKmYHokMtCINM0p8bDmbAc,97557
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
@@ -85,13 +85,13 @@ 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=0jDuJYb1tipD-N9chnMCvd25JySJQCm8CDCt_lobmv0,122898
88
+ sqlalchemy/engine/base.py,sha256=frWSMmt3dlentYH4QNN3cijdGzp8NbunColUZwWsWgI,122958
89
89
  sqlalchemy/engine/characteristics.py,sha256=N3kbvw_ApMh86wb5yAGnxtPYD4YRhYMWion1H_aVZBI,4765
90
90
  sqlalchemy/engine/create.py,sha256=mYJtOG2ZKM8sgyfjpGpamW15RDU7JXi5s6iibbJHMIs,33206
91
91
  sqlalchemy/engine/cursor.py,sha256=cFq61yrw76k-QR_xNUBWuL-Zeyb14ltG-6jo2Q2iuuw,76392
92
- sqlalchemy/engine/default.py,sha256=B3i9Ce3Jk64CtNaS1gnes4uCMhiQn2cMwnZh5RxR-aE,84137
92
+ sqlalchemy/engine/default.py,sha256=2wwKKdsagb3QTajRSEw8Hl-EnQ-LmRxy822xOGyenHc,84648
93
93
  sqlalchemy/engine/events.py,sha256=c0unNFFiHzTAvkUtXoJaxzMFMDwurBkHiiUhuN8qluc,37381
94
- sqlalchemy/engine/interfaces.py,sha256=n6G7VW5kaGyBlKdCkgaDs694tfzLPOxZeboDmVaJThg,112832
94
+ sqlalchemy/engine/interfaces.py,sha256=fcVHOmnMo7JZLHzgSKoK3QsdVHH7kJ_AmrDvwW9Ka3k,112936
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=FlT5kPpKm7Lah50GNt5XcnlJWojTL3LD_x0SoCF9kfY,75127
@@ -103,7 +103,7 @@ sqlalchemy/engine/util.py,sha256=bNirO8k1S8yOW61uNH-a9QrWtAJ9VGFgbiR0lk1lUQU,568
103
103
  sqlalchemy/event/__init__.py,sha256=KBrp622xojnC3FFquxa2JsMamwAbfkvzfv6Op0NKiYc,997
104
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=270OShTD17-bSFUFnPtKdVnB0NFJZ2AouYPo1wT0aJw,15127
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
@@ -117,14 +117,14 @@ sqlalchemy/ext/indexable.py,sha256=UkTelbydKCdKelzbv3HWFFavoET9WocKaGRPGEOVfN8,1
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
@@ -133,23 +133,23 @@ sqlalchemy/ext/mypy/decl_class.py,sha256=1vVJRII2apnLTUbc5HkJS6Z2GueaUv_eKvhbqh7
133
133
  sqlalchemy/ext/mypy/infer.py,sha256=KVnmLFEVS33Al8pUKI7MJbJQu3KeveBUMl78EluBORw,19369
134
134
  sqlalchemy/ext/mypy/names.py,sha256=Q3ef8XQBgVm9WUwlItqlYCXDNi_kbV5DdLEgbtEMEI8,10479
135
135
  sqlalchemy/ext/mypy/plugin.py,sha256=74ML8LI9xar0V86oCxnPFv5FQGEEfUzK64vOay4BKFs,9750
136
- sqlalchemy/ext/mypy/util.py,sha256=1zuDQG8ezmF-XhJmAQU_lcBHiD--sL-lq20clg8t4lE,9448
136
+ sqlalchemy/ext/mypy/util.py,sha256=DKRaurkXHI2lAMAAcEO5GLXbX_m2Xqy7l_juh8Byf5U,9960
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=c4RMiYKIXzOTjuPIBbyRIzpizYjUBm2sd7k0n1vqb2o,100717
141
141
  sqlalchemy/orm/_typing.py,sha256=DVBfpHmDVK4x1zxaGJPY2GoTrAsyR6uexv20Lzf1afc,4973
142
- sqlalchemy/orm/attributes.py,sha256=wGpyY9aIxWRkL3y6qlbUgIW78rGA4X38ZhOaWI9S818,92535
142
+ sqlalchemy/orm/attributes.py,sha256=lorOHBJvJJYndOuafWJhHBbQ1pR6FAyimhqz-mErBRQ,92534
143
143
  sqlalchemy/orm/base.py,sha256=re6A8ooMxLyfCAeQfhBwwxeJQkiH7EtzzOZIVIiTPlw,27466
144
- sqlalchemy/orm/bulk_persistence.py,sha256=wU204OQK-V6rJfpc3HPeMAA1X9vZg9nSNpI1zKuZtcY,70086
144
+ sqlalchemy/orm/bulk_persistence.py,sha256=MfFALcRkE3eKwxkntVM1ZcUhOphUFwAr1Fc21qJoobo,71403
145
145
  sqlalchemy/orm/clsregistry.py,sha256=29LyYiuj0qbebOpgW6DbBPNB2ikTweFQar1byCst7I0,17958
146
- sqlalchemy/orm/collections.py,sha256=jpMsJGVixmrW9kfT8wevm9kpatKRqyDLcqWd7CjKPxE,52179
146
+ sqlalchemy/orm/collections.py,sha256=WEKuUCRgLhDhJEIBhZ21UrE0pBOyRm2zxD20GvbgA9g,52243
147
147
  sqlalchemy/orm/context.py,sha256=pFFc-1ZjaV3aQMAO27UIh0W6NyLc30n2IbuWNprMtS8,112445
148
148
  sqlalchemy/orm/decl_api.py,sha256=_WPKQ_vSE5k2TLtNmkaxxYmvbhZvkRMrrvCeDxdqDQE,63998
149
- sqlalchemy/orm/decl_base.py,sha256=Tq6I3Jm3bkM01mmoiHfdFXLE94YDk1ik2u2dXL1RxLc,81601
149
+ sqlalchemy/orm/decl_base.py,sha256=oeL7xrty2J81FyDx03dNe02BtZ-R6iYpum-BoA1rhik,82822
150
150
  sqlalchemy/orm/dependency.py,sha256=hgjksUWhgbmgHK5GdJdiDCBgDAIGQXIrY-Tj79tbL2k,47631
151
- sqlalchemy/orm/descriptor_props.py,sha256=pKtpP7H1LB_YuHRVrEYpfFZybEnUUdPwQXxduYFe2hA,37180
152
- sqlalchemy/orm/dynamic.py,sha256=jksBDCOsm6EBMVParcNGuMeaAv12hX4IzouKspC-HPA,9786
151
+ sqlalchemy/orm/descriptor_props.py,sha256=dR_h4Gvdtpcdp4sj_ZOR4P5Nng2J2vhsvFHouRLlntc,37244
152
+ sqlalchemy/orm/dynamic.py,sha256=rWAZ-nfAkREuNjt8e_FRdqYrvHDdbODn1CcfyP8Y18k,9816
153
153
  sqlalchemy/orm/evaluator.py,sha256=q292K5vdpP69G7Z9y1RqI5GFAk2diUPwnsXE8De_Wgw,11925
154
154
  sqlalchemy/orm/events.py,sha256=0lxP-EluVWSUr07ny2nsuQ8QhrDu9Qc4ON6QRUhuJnA,127703
155
155
  sqlalchemy/orm/exc.py,sha256=IP40P-wOeXhkYk0YizuTC3wqm6W9cPTaQU08f5MMaQ0,7413
@@ -157,22 +157,22 @@ sqlalchemy/orm/identity.py,sha256=jHdCxCpCyda_8mFOfGmN_Pr0XZdKiU-2hFZshlNxbHs,92
157
157
  sqlalchemy/orm/instrumentation.py,sha256=M-kZmkUvHUxtf-0mCA8RIM5QmMH1hWlYR_pKMwaidjA,24321
158
158
  sqlalchemy/orm/interfaces.py,sha256=Hmf1BjbfOarZRgMlruqghR7cgH2xyugA9v5t0x-a-wU,48502
159
159
  sqlalchemy/orm/loading.py,sha256=9RacpzFOWbuKgPRWHFmyIvD4fYCLAnkpwBFASyQ2CoI,58277
160
- sqlalchemy/orm/mapped_collection.py,sha256=3cneB1dfPTLrsTvKoo9_oCY2xtq4UAHfe5WSXPyqIS4,19690
160
+ sqlalchemy/orm/mapped_collection.py,sha256=zK3d3iozORzDruBUrAmkVC0RR3Orj5szk-TSQ24xzIU,19682
161
161
  sqlalchemy/orm/mapper.py,sha256=bfoRzNKKnjF-CDvr2Df7HZC9TepvtuQ49LRz_fW7DGQ,171088
162
162
  sqlalchemy/orm/path_registry.py,sha256=sJZMv_WPqUpHfQtKWaX3WYFeKBcNJ8C3wOM2mkBGkTE,25920
163
163
  sqlalchemy/orm/persistence.py,sha256=dzyB2JOXNwQgaCbN8kh0sEz00WFePr48qf8NWVCUZH8,61701
164
164
  sqlalchemy/orm/properties.py,sha256=eDPFzxYUgdM3uWjHywnb1XW-i0tVKKyx7A2MCD31GQU,29306
165
- sqlalchemy/orm/query.py,sha256=qKuFTUlbGVjs84AQ7APBY0PJhrzc2JJ1upeI658MV_o,117596
165
+ sqlalchemy/orm/query.py,sha256=woZDL-vAvu_CWQUgxf7geh7Bkl1gUE2zmrdF5UmTrFk,117630
166
166
  sqlalchemy/orm/relationships.py,sha256=dS5SY0v1MiD7iCNnAQlHaI6prUQhL5EkXT7ijc8FR8E,128644
167
- sqlalchemy/orm/scoping.py,sha256=gFYywLeMmd5qjFdVPzeuCX727mTaChrCv8aqn4wPke0,78677
168
- sqlalchemy/orm/session.py,sha256=Da-wd01Rw5fCqRr05RBY3dath-ssdloB4BvVrTVy8LA,195250
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=CZJTQ-wPwIy0c3AMFxgJnBgaft6eEf4JzcCLcaaCSjg,195979
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=tFDJllL8Evxo2UjpyMkrxxRdphaclM-FBUd9O8WArdY,85366
171
+ sqlalchemy/orm/strategies.py,sha256=Sd6IKV_ya_CBKzebwazRrWWabvZ0PqariUB7KKUIUrc,115275
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=u7Wd8Wc2V0Qu5EBTrt2taB1Clhnr2a8aK6LC9eIeKZw,80734
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
@@ -186,30 +186,30 @@ sqlalchemy/sql/_py_util.py,sha256=hiM9ePbRSGs60bAMxPFuJCIC_p9SQ1VzqXGiPchiYwE,21
186
186
  sqlalchemy/sql/_selectable_constructors.py,sha256=wjE6HrLm9cR7bxvZXT8sFLUqT6t_J9G1XyQCnYmBDl0,18780
187
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=Lg7iHywXmB7XuRMar45XSM4KayChGhfj1c8E7nWUJdo,73899
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=1xzN_9U5BCJGgokdc5iYj5o2cMAfEEZkr1Oa9Q-JYj8,40493
192
- sqlalchemy/sql/compiler.py,sha256=e5XWUmeZnE3O8r7fndfmXjAze3qlFZY223BHqrso0AY,274647
193
- sqlalchemy/sql/crud.py,sha256=g9xcol2KRGjZi1qsb2-bVz8zgVy_53gfMtJcnNO2vyQ,56521
191
+ sqlalchemy/sql/coercions.py,sha256=KjrVc2ks6cx_o6-_Zpu6uPuNGjJy2xvFzXy8z5oshQg,40628
192
+ sqlalchemy/sql/compiler.py,sha256=hrTptbOKIgVIHapywj4Lk5OMwpXvHS-KGg3odFwlo-I,274687
193
+ sqlalchemy/sql/crud.py,sha256=HBX4QPtW_PYYJmIKfNr-wE8IdEr963N24WXzFBUZOo0,56514
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=coAHu2qUNrEKOv0ZvnDsc3G8_6o9lciylZn-K6fJDXU,174621
197
+ sqlalchemy/sql/elements.py,sha256=Vmn_ux-fwpKBoMyQPMxIAj8QrLZVDD9iCh6odPlfzbA,176378
198
198
  sqlalchemy/sql/events.py,sha256=iC_Q1Htm1Aobt5tOYxWfHHqNpoytrULORmUKcusH_-E,18290
199
199
  sqlalchemy/sql/expression.py,sha256=VMX-dLpsZYnVRJpYNDozDUgaj7iQ0HuewUKVefD57PE,7586
200
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
- sqlalchemy/sql/operators.py,sha256=r4oQp4h5zTMFFOpiFNV56joIK-QIjJCobatsmaZ-724,75935
203
+ sqlalchemy/sql/operators.py,sha256=himArRqBzrljob3Zfhi_ZS-Jleg1u6YFp0g3d7Co6IM,76106
204
204
  sqlalchemy/sql/roles.py,sha256=pOsVn_OZD7mF2gJByHf24Rjopt0_Hu3dUCEOK5t4KS8,7662
205
- sqlalchemy/sql/schema.py,sha256=GctEXTYd5R9nqS07xgf5uFC-_3UIZJ7q3RaetzSs0Pk,229225
206
- sqlalchemy/sql/selectable.py,sha256=XHL0xJeLWnQeGG_dK7zQ8lNsCGdP8DeJQuCF4bCW-bo,233505
207
- sqlalchemy/sql/sqltypes.py,sha256=AAXED0rebCNmrY8K8kL6zox8_GD0L_p0lRzwM3SxCGk,126076
208
- sqlalchemy/sql/traversals.py,sha256=NFgJrVJzInO3HrnG90CklxrDXhFydZohPs2vRJkh3Bo,33589
209
- sqlalchemy/sql/type_api.py,sha256=CJAvRix_rRoOsE77sH4BqeGX0lIdtk8dX-StjGx3mUo,83208
205
+ sqlalchemy/sql/schema.py,sha256=XjSlSvJf6Ym8Y5Jt2c_TTAQ7OnOrnk9GU-RiJh2-yW0,229588
206
+ sqlalchemy/sql/selectable.py,sha256=iGTCMsfxmVjPcD3aGJTpHSpF-ckXEJyn29M6rD5UJww,234550
207
+ sqlalchemy/sql/sqltypes.py,sha256=NJnsB-ZC-oyrVBQzhV_sbRHlqFShKAU2FEX65fBj8Vg,126941
208
+ sqlalchemy/sql/traversals.py,sha256=3ScTC1fh1-y8Y478h_2Azmd2xdQdWPWkDve4YgrwMf8,33664
209
+ sqlalchemy/sql/type_api.py,sha256=q_FieFRALHiRkhy5Bj-cVgFHa7DXF1dP23FaRRYKeho,83717
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
- sqlalchemy/testing/__init__.py,sha256=VsrEHrORpAF5n7Vfl43YQgABh6EP1xBx_gHxs7pSXeE,3126
212
+ sqlalchemy/testing/__init__.py,sha256=zgitAYzsCWT_U48ZiifXHHLJFo8nZBYmI-5TueA4_lE,3160
213
213
  sqlalchemy/testing/assertions.py,sha256=gL0rA7CCZJbcVgvWOPV91tTZTRwQc1_Ta0-ykBn83Ew,31439
214
214
  sqlalchemy/testing/assertsql.py,sha256=IgQG7l94WaiRP8nTbilJh1ZHZl125g7GPq-S5kmQZN0,16817
215
215
  sqlalchemy/testing/asyncio.py,sha256=kM8uuOqDBagZF0r9xvGmsiirUVLUQ_KBzjUFU67W-b8,3830
@@ -220,15 +220,15 @@ sqlalchemy/testing/exclusions.py,sha256=T8B01hmm8WVs-EKcUOQRzabahPqblWJfOidi6bHJ
220
220
  sqlalchemy/testing/pickleable.py,sha256=U9mIqk-zaxq9Xfy7HErP7UrKgTov-A3QFnhZh-NiOjI,2833
221
221
  sqlalchemy/testing/profiling.py,sha256=PbuPhRFbauFilUONeY3tV_Y_5lBkD7iCa8VVyH2Sk9Y,10148
222
222
  sqlalchemy/testing/provision.py,sha256=zXsw2D2Xpmw_chmYLsE1GXQqKQ-so3V8xU_joTcKan0,14619
223
- sqlalchemy/testing/requirements.py,sha256=N9pSj7z2wVMkBif-DQfPVa_cl9k6p9g_J5FY1OsWtrY,51817
223
+ sqlalchemy/testing/requirements.py,sha256=9hJRdF7ePsuor5WT1UPgEV2nlA7pjlr92pVPINmwO9g,52518
224
224
  sqlalchemy/testing/schema.py,sha256=lr4GkGrGwagaHMuSGzWdzkMaj3HnS7dgfLLWfxt__-U,6513
225
- sqlalchemy/testing/util.py,sha256=BFiSp3CEX95Dr-vv4l_7ZRu5vjZi9hjjnp-JKNfuS5E,14080
225
+ sqlalchemy/testing/util.py,sha256=qldXKw8gRJ4I2x3uXsBssYMqwatmcMFMTOveRQCmfDU,14469
226
226
  sqlalchemy/testing/warnings.py,sha256=fJ-QJUY2zY2PPxZJKv9medW-BKKbCNbA4Ns_V3YwFXM,1546
227
227
  sqlalchemy/testing/fixtures/__init__.py,sha256=dMClrIoxqlYIFpk2ia4RZpkbfxsS_3EBigr9QsPJ66g,1198
228
228
  sqlalchemy/testing/fixtures/base.py,sha256=9r_J2ksiTzClpUxW0TczICHrWR7Ny8PV8IsBz6TsGFI,12256
229
229
  sqlalchemy/testing/fixtures/mypy.py,sha256=gdxiwNFIzDlNGSOdvM3gbwDceVCC9t8oM5kKbwyhGBk,11973
230
230
  sqlalchemy/testing/fixtures/orm.py,sha256=8EFbnaBbXX_Bf4FcCzBUaAHgyVpsLGBHX16SGLqE3Fg,6095
231
- sqlalchemy/testing/fixtures/sql.py,sha256=TE5q2BSOc_Vq1TPaLnj1F9ZA_YiQHlqyvUtGId9bGr0,15774
231
+ sqlalchemy/testing/fixtures/sql.py,sha256=KZMjco9_3dsuspmkew5Ejp88Wlr9PsSBB1qeJGFxQAk,15900
232
232
  sqlalchemy/testing/plugin/__init__.py,sha256=79F--BIY_NTBzVRIlJGgAY5LNJJ3cD19XvrAo4X0W9A,247
233
233
  sqlalchemy/testing/plugin/bootstrap.py,sha256=oYScMbEW4pCnWlPEAq1insFruCXFQeEVBwo__i4McpU,1685
234
234
  sqlalchemy/testing/plugin/plugin_base.py,sha256=BgNzWNEmgpK4CwhyblQQKnH-7FDKVi_Uul5vw8fFjBU,21578
@@ -240,29 +240,29 @@ sqlalchemy/testing/suite/test_deprecations.py,sha256=BcJxZTcjYqeOAENVElCg3hVvU6f
240
240
  sqlalchemy/testing/suite/test_dialect.py,sha256=EH4ZQWbnGdtjmx5amZtTyhYmrkXJCvW1SQoLahoE7uk,22923
241
241
  sqlalchemy/testing/suite/test_insert.py,sha256=9azifj6-OCD7s8h_tAO1uPw100ibQv8YoKc_VA3hn3c,18824
242
242
  sqlalchemy/testing/suite/test_reflection.py,sha256=tJSbJFg5fw0sSUv3I_FPmhN7rWWeJtq3YyxmylWJUlM,106466
243
- sqlalchemy/testing/suite/test_results.py,sha256=NQ23m8FDVd0ub751jN4PswGoAhk5nrqvjHvpYULZXnc,15937
243
+ sqlalchemy/testing/suite/test_results.py,sha256=X720GafdA4p75SOGS93j-dXkt6QDEnnJbU2bh18VCcg,16914
244
244
  sqlalchemy/testing/suite/test_rowcount.py,sha256=3KDTlRgjpQ1OVfp__1cv8Hvq4CsDKzmrhJQ_WIJWoJg,7900
245
- sqlalchemy/testing/suite/test_select.py,sha256=FvMFYQW9IJpDWGYZiJk46is6YrtmdSghBdTjZCG8T0Y,58574
245
+ sqlalchemy/testing/suite/test_select.py,sha256=ulRZQJlzkwwcewEyisuBEXVWFR0Wshz9MEDxYYiYLwQ,61732
246
246
  sqlalchemy/testing/suite/test_sequence.py,sha256=66bCoy4xo99GBSaX6Hxb88foANAykLGRz1YEKbvpfuA,9923
247
- sqlalchemy/testing/suite/test_types.py,sha256=rFmTOg6XuMch9L2-XthfLJRCTTwpZbMfrNss2g09gmc,65677
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
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
- sqlalchemy/util/compat.py,sha256=R6bpBydldtbr6h7oJePihQxFb7jKiI-YDsK465MSOzk,8714
255
+ sqlalchemy/util/compat.py,sha256=fJWqZVkW7qPY2l0DxK-7fHKjyp7b-wa-5wOlmuZlick,8724
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=kT7kwtTOPzHUFs6PhM1IEoW5ioeuFUFg2pjHSbH4d94,64891
258
+ sqlalchemy/util/langhelpers.py,sha256=uIK3szZuq9aMnO-vEpSlNekNWv4I-E391e56bkTnUm0,65090
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
263
  sqlalchemy/util/typing.py,sha256=UctfgugSTnFJgZraikXJbB-5RoV7oyccZmbf2NeRfoA,16671
264
- SQLAlchemy-2.0.30.dist-info/LICENSE,sha256=PA9Zq4h9BB3mpOUv_j6e212VIt6Qn66abNettue-MpM,1100
265
- SQLAlchemy-2.0.30.dist-info/METADATA,sha256=je_u9qkpPX36jMg6zWrd8VjcEuly2P0zmsxfGP9GAHE,9602
266
- SQLAlchemy-2.0.30.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
267
- SQLAlchemy-2.0.30.dist-info/top_level.txt,sha256=rp-ZgB7D8G11ivXON5VGPjupT1voYmWqkciDt5Uaw_Q,11
268
- SQLAlchemy-2.0.30.dist-info/RECORD,,
264
+ SQLAlchemy-2.0.32.dist-info/LICENSE,sha256=PA9Zq4h9BB3mpOUv_j6e212VIt6Qn66abNettue-MpM,1100
265
+ SQLAlchemy-2.0.32.dist-info/METADATA,sha256=hG6dXB5GSsBurmqvonmwwtBvJlerDWuK-3ERzPExHQU,9581
266
+ SQLAlchemy-2.0.32.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
267
+ SQLAlchemy-2.0.32.dist-info/top_level.txt,sha256=rp-ZgB7D8G11ivXON5VGPjupT1voYmWqkciDt5Uaw_Q,11
268
+ SQLAlchemy-2.0.32.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: bdist_wheel (0.44.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
sqlalchemy/__init__.py CHANGED
@@ -269,7 +269,7 @@ from .types import Uuid as Uuid
269
269
  from .types import VARBINARY as VARBINARY
270
270
  from .types import VARCHAR as VARCHAR
271
271
 
272
- __version__ = "2.0.30"
272
+ __version__ = "2.0.32"
273
273
 
274
274
 
275
275
  def __go(lcls: Any) -> None:
@@ -36,7 +36,8 @@ class AsyncAdapt_dbapi_cursor:
36
36
  cursor = self._connection.cursor()
37
37
  self._cursor = self._aenter_cursor(cursor)
38
38
 
39
- self._rows = collections.deque()
39
+ if not self.server_side:
40
+ self._rows = collections.deque()
40
41
 
41
42
  def _aenter_cursor(self, cursor):
42
43
  return self.await_(cursor.__aenter__())
@@ -149,6 +150,14 @@ class AsyncAdapt_dbapi_ss_cursor(AsyncAdapt_dbapi_cursor):
149
150
  def fetchall(self):
150
151
  return self.await_(self._cursor.fetchall())
151
152
 
153
+ def __iter__(self):
154
+ iterator = self._cursor.__aiter__()
155
+ while True:
156
+ try:
157
+ yield self.await_(iterator.__anext__())
158
+ except StopAsyncIteration:
159
+ break
160
+
152
161
 
153
162
  class AsyncAdapt_dbapi_connection(AdaptedConnection):
154
163
  _cursor_cls = AsyncAdapt_dbapi_cursor
@@ -1988,6 +1988,10 @@ class MSSQLCompiler(compiler.SQLCompiler):
1988
1988
  self.tablealiases = {}
1989
1989
  super().__init__(*args, **kwargs)
1990
1990
 
1991
+ def _format_frame_clause(self, range_, **kw):
1992
+ kw["literal_execute"] = True
1993
+ return super()._format_frame_clause(range_, **kw)
1994
+
1991
1995
  def _with_legacy_schema_aliasing(fn):
1992
1996
  def decorate(self, *arg, **kw):
1993
1997
  if self.dialect.legacy_schema_aliasing:
@@ -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
 
@@ -2380,6 +2380,8 @@ class MySQLTypeCompiler(compiler.GenericTypeCompiler):
2380
2380
  def _visit_enumerated_values(self, name, type_, enumerated_values):
2381
2381
  quoted_enums = []
2382
2382
  for e in enumerated_values:
2383
+ if self.dialect.identifier_preparer._double_percents:
2384
+ e = e.replace("%", "%%")
2383
2385
  quoted_enums.append("'%s'" % e.replace("'", "''"))
2384
2386
  return self._extend_string(
2385
2387
  type_, {}, "%s(%s)" % (name, ",".join(quoted_enums))
@@ -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 +"