From 5eb407f84bdabdbcd68975dbf76dc4c0809d7373 Mon Sep 17 00:00:00 2001 From: Federico Caselli Date: Tue, 14 Sep 2021 23:38:00 +0200 Subject: Added support for ``psycopg`` dialect. Both sync and async versions are supported. Fixes: #6842 Change-Id: I57751c5028acebfc6f9c43572562405453a2f2a4 --- lib/sqlalchemy/sql/sqltypes.py | 42 ++++++++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 14 deletions(-) (limited to 'lib/sqlalchemy/sql') diff --git a/lib/sqlalchemy/sql/sqltypes.py b/lib/sqlalchemy/sql/sqltypes.py index 8874f0a83..427251a88 100644 --- a/lib/sqlalchemy/sql/sqltypes.py +++ b/lib/sqlalchemy/sql/sqltypes.py @@ -2338,26 +2338,40 @@ class JSON(Indexable, TypeEngine): def _str_impl(self): return String() - def bind_processor(self, dialect): - string_process = self._str_impl.bind_processor(dialect) + def _make_bind_processor(self, string_process, json_serializer): + if string_process: - json_serializer = dialect._json_serializer or json.dumps + def process(value): + if value is self.NULL: + value = None + elif isinstance(value, elements.Null) or ( + value is None and self.none_as_null + ): + return None - def process(value): - if value is self.NULL: - value = None - elif isinstance(value, elements.Null) or ( - value is None and self.none_as_null - ): - return None + serialized = json_serializer(value) + return string_process(serialized) - serialized = json_serializer(value) - if string_process: - serialized = string_process(serialized) - return serialized + else: + + def process(value): + if value is self.NULL: + value = None + elif isinstance(value, elements.Null) or ( + value is None and self.none_as_null + ): + return None + + return json_serializer(value) return process + def bind_processor(self, dialect): + string_process = self._str_impl.bind_processor(dialect) + json_serializer = dialect._json_serializer or json.dumps + + return self._make_bind_processor(string_process, json_serializer) + def result_processor(self, dialect, coltype): string_process = self._str_impl.result_processor(dialect, coltype) json_deserializer = dialect._json_deserializer or json.loads -- cgit v1.2.1