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