diff options
author | J. Nick Koston <nick@koston.org> | 2023-04-24 22:32:17 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2023-04-25 10:20:36 -0400 |
commit | 188cb4226ac7b337446689ab3498b4397d0b7d2d (patch) | |
tree | bdd19819afc3daf710db47f536c1e2f3d6d9e855 /lib/sqlalchemy/dialects | |
parent | 32a17e60ba63f0278a754e1ab7e9ebf9460e07c5 (diff) | |
download | sqlalchemy-188cb4226ac7b337446689ab3498b4397d0b7d2d.tar.gz |
disable "bytes" handler for all drivers other than psycopg2
Improved row processing performance for "binary" datatypes by making the
"bytes" handler conditional on a per driver basis. As a result, the
"bytes" result handler has been disabled for nearly all drivers other than
psycopg2, all of which in modern forms support returning Python "bytes"
directly. Pull request courtesy J. Nick Koston.
Fixes: #9680
Closes: #9681
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/9681
Pull-request-sha: 4f2fd88bd9af54c54438a3b72a2f30384b0f8898
Change-Id: I394bdcbebaab272e63b13cc02f60813b7aa76839
Diffstat (limited to 'lib/sqlalchemy/dialects')
-rw-r--r-- | lib/sqlalchemy/dialects/mssql/base.py | 5 | ||||
-rw-r--r-- | lib/sqlalchemy/dialects/mysql/base.py | 2 | ||||
-rw-r--r-- | lib/sqlalchemy/dialects/oracle/base.py | 1 | ||||
-rw-r--r-- | lib/sqlalchemy/dialects/postgresql/base.py | 2 | ||||
-rw-r--r-- | lib/sqlalchemy/dialects/postgresql/psycopg2.py | 2 | ||||
-rw-r--r-- | lib/sqlalchemy/dialects/sqlite/pysqlite.py | 1 |
6 files changed, 12 insertions, 1 deletions
diff --git a/lib/sqlalchemy/dialects/mssql/base.py b/lib/sqlalchemy/dialects/mssql/base.py index 4a7e48ab8..0afd726fd 100644 --- a/lib/sqlalchemy/dialects/mssql/base.py +++ b/lib/sqlalchemy/dialects/mssql/base.py @@ -1347,7 +1347,8 @@ class TIMESTAMP(sqltypes._Binary): if self.convert_int: def process(value): - value = super_(value) + if super_: + value = super_(value) if value is not None: # https://stackoverflow.com/a/30403242/34549 value = int(codecs.encode(value, "hex"), 16) @@ -2974,6 +2975,8 @@ class MSDialect(default.DefaultDialect): supports_empty_insert = False favor_returning_over_lastrowid = True + returns_native_bytes = True + supports_comments = True supports_default_metavalue = False """dialect supports INSERT... VALUES (DEFAULT) syntax - diff --git a/lib/sqlalchemy/dialects/mysql/base.py b/lib/sqlalchemy/dialects/mysql/base.py index eb9ccc606..2ed2bbc7a 100644 --- a/lib/sqlalchemy/dialects/mysql/base.py +++ b/lib/sqlalchemy/dialects/mysql/base.py @@ -2398,6 +2398,8 @@ class MySQLDialect(default.DefaultDialect): supports_native_enum = True + returns_native_bytes = True + supports_sequences = False # default for MySQL ... # ... may be updated to True for MariaDB 10.3+ in initialize() diff --git a/lib/sqlalchemy/dialects/oracle/base.py b/lib/sqlalchemy/dialects/oracle/base.py index 08ab35bea..a3e724cbe 100644 --- a/lib/sqlalchemy/dialects/oracle/base.py +++ b/lib/sqlalchemy/dialects/oracle/base.py @@ -1405,6 +1405,7 @@ class OracleDialect(default.DefaultDialect): supports_simple_order_by_label = False cte_follows_insert = True + returns_native_bytes = True supports_sequences = True sequences_optional = False diff --git a/lib/sqlalchemy/dialects/postgresql/base.py b/lib/sqlalchemy/dialects/postgresql/base.py index ad5e346b7..8e9994293 100644 --- a/lib/sqlalchemy/dialects/postgresql/base.py +++ b/lib/sqlalchemy/dialects/postgresql/base.py @@ -2912,6 +2912,8 @@ class PGDialect(default.DefaultDialect): postfetch_lastrowid = False use_insertmanyvalues = True + returns_native_bytes = True + insertmanyvalues_implicit_sentinel = ( InsertmanyvaluesSentinelOpts.ANY_AUTOINCREMENT | InsertmanyvaluesSentinelOpts.USE_INSERT_FROM_SELECT diff --git a/lib/sqlalchemy/dialects/postgresql/psycopg2.py b/lib/sqlalchemy/dialects/postgresql/psycopg2.py index e28bd8fda..5cdd34183 100644 --- a/lib/sqlalchemy/dialects/postgresql/psycopg2.py +++ b/lib/sqlalchemy/dialects/postgresql/psycopg2.py @@ -600,6 +600,8 @@ class PGDialect_psycopg2(_PGDialect_common_psycopg): psycopg2_version = (0, 0) use_insertmanyvalues_wo_returning = True + returns_native_bytes = False + _has_native_hstore = True colspecs = util.update_copy( diff --git a/lib/sqlalchemy/dialects/sqlite/pysqlite.py b/lib/sqlalchemy/dialects/sqlite/pysqlite.py index a40e3d256..71da4d0ef 100644 --- a/lib/sqlalchemy/dialects/sqlite/pysqlite.py +++ b/lib/sqlalchemy/dialects/sqlite/pysqlite.py @@ -486,6 +486,7 @@ class _SQLite_pysqliteDate(DATE): class SQLiteDialect_pysqlite(SQLiteDialect): default_paramstyle = "qmark" supports_statement_cache = True + returns_native_bytes = True colspecs = util.update_copy( SQLiteDialect.colspecs, |