SQLAlchemy 2.1.0b2__py3-none-any.whl → 2.1.0b3__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/__init__.py +1 -1
- sqlalchemy/connectors/pyodbc.py +13 -4
- sqlalchemy/dialects/_typing.py +0 -1
- sqlalchemy/dialects/mssql/__init__.py +0 -1
- sqlalchemy/dialects/mssql/base.py +1056 -437
- sqlalchemy/dialects/mssql/information_schema.py +61 -1
- sqlalchemy/dialects/mssql/mssqlpython.py +8 -2
- sqlalchemy/dialects/mssql/pymssql.py +1 -0
- sqlalchemy/dialects/mssql/pyodbc.py +0 -1
- sqlalchemy/dialects/mysql/aiomysql.py +27 -2
- sqlalchemy/dialects/mysql/asyncmy.py +25 -3
- sqlalchemy/dialects/mysql/base.py +20 -2
- sqlalchemy/dialects/mysql/cymysql.py +1 -0
- sqlalchemy/dialects/mysql/mariadbconnector.py +1 -0
- sqlalchemy/dialects/mysql/mysqlconnector.py +3 -2
- sqlalchemy/dialects/mysql/mysqldb.py +1 -0
- sqlalchemy/dialects/mysql/pymysql.py +30 -9
- sqlalchemy/dialects/mysql/pyodbc.py +1 -0
- sqlalchemy/dialects/mysql/reflection.py +3 -3
- sqlalchemy/dialects/oracle/base.py +1 -133
- sqlalchemy/dialects/oracle/cx_oracle.py +1 -0
- sqlalchemy/dialects/oracle/json.py +0 -1
- sqlalchemy/dialects/oracle/oracledb.py +1 -0
- sqlalchemy/dialects/oracle/vector.py +2 -4
- sqlalchemy/dialects/postgresql/__init__.py +0 -1
- sqlalchemy/dialects/postgresql/_psycopg_common.py +1 -1
- sqlalchemy/dialects/postgresql/asyncpg.py +4 -1
- sqlalchemy/dialects/postgresql/base.py +41 -120
- sqlalchemy/dialects/postgresql/ext.py +6 -0
- sqlalchemy/dialects/postgresql/hstore.py +2 -3
- sqlalchemy/dialects/postgresql/operators.py +0 -1
- sqlalchemy/dialects/postgresql/pg8000.py +3 -5
- sqlalchemy/dialects/postgresql/psycopg.py +1 -0
- sqlalchemy/dialects/postgresql/psycopg2.py +1 -0
- sqlalchemy/dialects/postgresql/psycopg2cffi.py +1 -0
- sqlalchemy/dialects/sqlite/__init__.py +2 -0
- sqlalchemy/dialects/sqlite/aiosqlite.py +1 -0
- sqlalchemy/dialects/sqlite/base.py +13 -10
- sqlalchemy/dialects/sqlite/json.py +34 -0
- sqlalchemy/dialects/sqlite/pysqlcipher.py +0 -1
- sqlalchemy/dialects/sqlite/pysqlite.py +1 -0
- sqlalchemy/engine/_result_cy.py +91 -13
- sqlalchemy/engine/base.py +104 -101
- sqlalchemy/engine/create.py +1 -1
- sqlalchemy/engine/cursor.py +7 -3
- sqlalchemy/engine/default.py +116 -0
- sqlalchemy/engine/interfaces.py +1 -1
- sqlalchemy/engine/mock.py +0 -1
- sqlalchemy/engine/processors.py +1 -0
- sqlalchemy/engine/reflection.py +1 -0
- sqlalchemy/engine/result.py +56 -10
- sqlalchemy/event/api.py +1 -1
- sqlalchemy/event/attr.py +1 -0
- sqlalchemy/event/base.py +1 -0
- sqlalchemy/event/legacy.py +1 -0
- sqlalchemy/event/registry.py +1 -0
- sqlalchemy/exc.py +1 -0
- sqlalchemy/ext/__init__.py +0 -1
- sqlalchemy/ext/associationproxy.py +1 -0
- sqlalchemy/ext/asyncio/engine.py +1 -1
- sqlalchemy/ext/asyncio/scoping.py +2 -2
- sqlalchemy/ext/asyncio/session.py +2 -3
- sqlalchemy/ext/automap.py +1 -0
- sqlalchemy/ext/baked.py +0 -1
- sqlalchemy/ext/compiler.py +1 -0
- sqlalchemy/ext/declarative/extensions.py +1 -0
- sqlalchemy/ext/horizontal_shard.py +1 -1
- sqlalchemy/ext/instrumentation.py +1 -1
- sqlalchemy/ext/orderinglist.py +1 -0
- sqlalchemy/ext/serializer.py +0 -1
- sqlalchemy/future/__init__.py +1 -0
- sqlalchemy/inspection.py +1 -0
- sqlalchemy/log.py +2 -2
- sqlalchemy/orm/_typing.py +0 -3
- sqlalchemy/orm/clsregistry.py +61 -13
- sqlalchemy/orm/collections.py +1 -0
- sqlalchemy/orm/context.py +5 -1
- sqlalchemy/orm/decl_api.py +14 -11
- sqlalchemy/orm/decl_base.py +12 -15
- sqlalchemy/orm/dependency.py +1 -1
- sqlalchemy/orm/descriptor_props.py +1 -1
- sqlalchemy/orm/dynamic.py +0 -1
- sqlalchemy/orm/evaluator.py +0 -1
- sqlalchemy/orm/events.py +1 -0
- sqlalchemy/orm/instrumentation.py +0 -1
- sqlalchemy/orm/interfaces.py +0 -1
- sqlalchemy/orm/loading.py +27 -18
- sqlalchemy/orm/mapper.py +29 -0
- sqlalchemy/orm/persistence.py +1 -0
- sqlalchemy/orm/properties.py +3 -4
- sqlalchemy/orm/query.py +1 -1
- sqlalchemy/orm/relationships.py +29 -1
- sqlalchemy/orm/scoping.py +6 -5
- sqlalchemy/orm/session.py +81 -18
- sqlalchemy/orm/strategies.py +107 -58
- sqlalchemy/orm/strategy_options.py +14 -3
- sqlalchemy/orm/unitofwork.py +2 -3
- sqlalchemy/orm/util.py +13 -0
- sqlalchemy/pool/impl.py +1 -0
- sqlalchemy/sql/_annotated_cols.py +8 -3
- sqlalchemy/sql/_orm_types.py +0 -1
- sqlalchemy/sql/_util_cy.py +3 -3
- sqlalchemy/sql/base.py +0 -1
- sqlalchemy/sql/compiler.py +6 -1
- sqlalchemy/sql/crud.py +2 -1
- sqlalchemy/sql/ddl.py +1 -1
- sqlalchemy/sql/dml.py +47 -6
- sqlalchemy/sql/elements.py +8 -5
- sqlalchemy/sql/expression.py +0 -1
- sqlalchemy/sql/functions.py +75 -0
- sqlalchemy/sql/lambdas.py +2 -3
- sqlalchemy/sql/schema.py +3 -4
- sqlalchemy/sql/selectable.py +17 -28
- sqlalchemy/sql/sqltypes.py +1 -1
- sqlalchemy/sql/traversals.py +0 -1
- sqlalchemy/sql/util.py +2 -1
- sqlalchemy/testing/engines.py +0 -1
- sqlalchemy/testing/fixtures/base.py +47 -5
- sqlalchemy/testing/fixtures/mypy.py +7 -7
- sqlalchemy/testing/fixtures/orm.py +2 -2
- sqlalchemy/testing/fixtures/sql.py +2 -2
- sqlalchemy/testing/plugin/bootstrap.py +0 -1
- sqlalchemy/testing/plugin/pytestplugin.py +9 -5
- sqlalchemy/testing/profiling.py +0 -1
- sqlalchemy/testing/provision.py +0 -1
- sqlalchemy/testing/suite/test_reflection.py +0 -6
- sqlalchemy/testing/util.py +0 -1
- sqlalchemy/types.py +0 -1
- sqlalchemy/util/_collections.py +1 -1
- sqlalchemy/util/compat.py +1 -1
- sqlalchemy/util/langhelpers.py +17 -14
- sqlalchemy/util/preloaded.py +1 -0
- sqlalchemy/util/queue.py +1 -1
- sqlalchemy/util/tool_support.py +1 -0
- sqlalchemy/util/typing.py +2 -4
- {sqlalchemy-2.1.0b2.dist-info → sqlalchemy-2.1.0b3.dist-info}/METADATA +3 -3
- sqlalchemy-2.1.0b3.dist-info/RECORD +263 -0
- sqlalchemy-2.1.0b2.dist-info/RECORD +0 -263
- {sqlalchemy-2.1.0b2.dist-info → sqlalchemy-2.1.0b3.dist-info}/WHEEL +0 -0
- {sqlalchemy-2.1.0b2.dist-info → sqlalchemy-2.1.0b3.dist-info}/licenses/LICENSE +0 -0
- {sqlalchemy-2.1.0b2.dist-info → sqlalchemy-2.1.0b3.dist-info}/top_level.txt +0 -0
sqlalchemy/__init__.py
CHANGED
sqlalchemy/connectors/pyodbc.py
CHANGED
|
@@ -77,10 +77,16 @@ class PyODBCConnector(Connector):
|
|
|
77
77
|
else:
|
|
78
78
|
|
|
79
79
|
def check_quote(token: str) -> str:
|
|
80
|
-
if
|
|
80
|
+
if (
|
|
81
|
+
";" in str(token)
|
|
82
|
+
or "}" in str(token)
|
|
83
|
+
or str(token).startswith("{")
|
|
84
|
+
):
|
|
81
85
|
token = "{%s}" % token.replace("}", "}}")
|
|
82
86
|
return token
|
|
83
87
|
|
|
88
|
+
driver = keys.pop("driver", self.pyodbc_driver_name)
|
|
89
|
+
|
|
84
90
|
keys = {k: check_quote(v) for k, v in keys.items()}
|
|
85
91
|
|
|
86
92
|
dsn_connection = "dsn" in keys or (
|
|
@@ -96,7 +102,6 @@ class PyODBCConnector(Connector):
|
|
|
96
102
|
port = ",%d" % int(keys.pop("port"))
|
|
97
103
|
|
|
98
104
|
connectors = []
|
|
99
|
-
driver = keys.pop("driver", self.pyodbc_driver_name)
|
|
100
105
|
if driver is None and keys:
|
|
101
106
|
# note if keys is empty, this is a totally blank URL
|
|
102
107
|
util.warn(
|
|
@@ -105,7 +110,9 @@ class PyODBCConnector(Connector):
|
|
|
105
110
|
"DSN-less connections"
|
|
106
111
|
)
|
|
107
112
|
else:
|
|
108
|
-
connectors.append(
|
|
113
|
+
connectors.append(
|
|
114
|
+
"DRIVER={%s}" % str(driver).replace("}", "}}")
|
|
115
|
+
)
|
|
109
116
|
|
|
110
117
|
connectors.extend(
|
|
111
118
|
[
|
|
@@ -136,7 +143,9 @@ class PyODBCConnector(Connector):
|
|
|
136
143
|
"AutoTranslate=%s" % keys.pop("odbc_autotranslate")
|
|
137
144
|
)
|
|
138
145
|
|
|
139
|
-
connectors.extend(
|
|
146
|
+
connectors.extend(
|
|
147
|
+
["%s=%s" % (check_quote(k), v) for k, v in keys.items()]
|
|
148
|
+
)
|
|
140
149
|
|
|
141
150
|
return ((";".join(connectors),), connect_args)
|
|
142
151
|
|
sqlalchemy/dialects/_typing.py
CHANGED
|
@@ -18,7 +18,6 @@ from ..sql.schema import Column
|
|
|
18
18
|
from ..sql.schema import ColumnCollectionConstraint
|
|
19
19
|
from ..sql.schema import Index
|
|
20
20
|
|
|
21
|
-
|
|
22
21
|
_OnConflictConstraintT = Union[str, ColumnCollectionConstraint, Index, None]
|
|
23
22
|
_OnConflictIndexElementsT = Optional[
|
|
24
23
|
Iterable[Union[Column[Any], str, roles.DDLConstraintColumnRole]]
|