diff options
| author | Federico Caselli <cfederico87@gmail.com> | 2021-09-14 23:38:00 +0200 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-11-26 10:14:44 -0500 |
| commit | 5eb407f84bdabdbcd68975dbf76dc4c0809d7373 (patch) | |
| tree | 0d37ab4b9c28d8a0fa6cefdcc1933d52ffd9a599 /lib/sqlalchemy/sql | |
| parent | 8ddb3ef165d0c2d6d7167bb861bb349e68b5e8df (diff) | |
| download | sqlalchemy-5eb407f84bdabdbcd68975dbf76dc4c0809d7373.tar.gz | |
Added support for ``psycopg`` dialect.
Both sync and async versions are supported.
Fixes: #6842
Change-Id: I57751c5028acebfc6f9c43572562405453a2f2a4
Diffstat (limited to 'lib/sqlalchemy/sql')
| -rw-r--r-- | lib/sqlalchemy/sql/sqltypes.py | 42 |
1 files changed, 28 insertions, 14 deletions
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 |
