From 75fb1c7479b9ddeaaed5604c0111382edc69e4ee Mon Sep 17 00:00:00 2001 From: Federico Caselli Date: Wed, 17 Mar 2021 00:27:18 +0100 Subject: Improve array support on pg8000 References: #6023 Change-Id: I0f6cbc34b3c0bfc0b8c86b3ebe4531e23039b6c0 --- lib/sqlalchemy/dialects/postgresql/array.py | 2 +- lib/sqlalchemy/dialects/postgresql/pg8000.py | 8 ++++++++ lib/sqlalchemy/sql/type_api.py | 3 ++- 3 files changed, 11 insertions(+), 2 deletions(-) (limited to 'lib/sqlalchemy') diff --git a/lib/sqlalchemy/dialects/postgresql/array.py b/lib/sqlalchemy/dialects/postgresql/array.py index 9659d31b9..0cb574dac 100644 --- a/lib/sqlalchemy/dialects/postgresql/array.py +++ b/lib/sqlalchemy/dialects/postgresql/array.py @@ -375,7 +375,7 @@ class ARRAY(sqltypes.ARRAY): if value is None: return value # isinstance(value, util.string_types) is required to handle - # the # case where a TypeDecorator for and Array of Enum is + # the case where a TypeDecorator for and Array of Enum is # used like was required in sa < 1.3.17 return super_rp( handle_raw_string(value) diff --git a/lib/sqlalchemy/dialects/postgresql/pg8000.py b/lib/sqlalchemy/dialects/postgresql/pg8000.py index d42dd9560..a94f9dcdb 100644 --- a/lib/sqlalchemy/dialects/postgresql/pg8000.py +++ b/lib/sqlalchemy/dialects/postgresql/pg8000.py @@ -93,6 +93,8 @@ import decimal import re from uuid import UUID as _python_UUID +from .array import ARRAY as PGARRAY +from .base import _ColonCast from .base import _DECIMAL_TYPES from .base import _FLOAT_TYPES from .base import _INT_TYPES @@ -256,6 +258,11 @@ class _PGBoolean(sqltypes.Boolean): return dbapi.BOOLEAN +class _PGARRAY(PGARRAY): + def bind_expression(self, bindvalue): + return _ColonCast(bindvalue, self) + + _server_side_id = util.counter() @@ -384,6 +391,7 @@ class PGDialect_pg8000(PGDialect): sqltypes.SmallInteger: _PGSmallInteger, sqltypes.BigInteger: _PGBigInteger, sqltypes.Enum: _PGEnum, + sqltypes.ARRAY: _PGARRAY, }, ) diff --git a/lib/sqlalchemy/sql/type_api.py b/lib/sqlalchemy/sql/type_api.py index acf88f0da..2a4688bcc 100644 --- a/lib/sqlalchemy/sql/type_api.py +++ b/lib/sqlalchemy/sql/type_api.py @@ -633,7 +633,8 @@ class TypeEngine(Traversible): try: return dialect._type_memos[self]["impl"] except KeyError: - return self._dialect_info(dialect)["impl"] + pass + return self._dialect_info(dialect)["impl"] def _unwrapped_dialect_impl(self, dialect): """Return the 'unwrapped' dialect impl for this type. -- cgit v1.2.1