Обсуждение: Overriding default adapters in psycopg
Hi!
I am attempting to override the default adapters for JSON and JSONB in psycopg (3), but I am not quite sure how to go
aboutit (I'm testing using orjson for serialization and deserialization). This doesn't appear to work:
> class CyanJSONBLoader(Loader):
> def load(self, data):
> return orjson.loads(data)
>
> psycopg.adapters.register_loader("jsonb", CyanJSONBLoader)
>
> class CyanJSONBDumper(Dumper):
> def dump(self, obj):
> return orjson.dumps(obj)
>
> psycopg.adapters.register_dumper("jsonb", CyanJSONBDumper)
>
The calls work, but the dump/load functions are never called.
Thanks!
On 11/16/25 08:56, Christophe Pettus wrote:
> Hi!
>
> I am attempting to override the default adapters for JSON and JSONB in psycopg (3), but I am not quite sure how to go
aboutit (I'm testing using orjson for serialization and deserialization). This doesn't appear to work:
>
>> class CyanJSONBLoader(Loader):
>> def load(self, data):
>> return orjson.loads(data)
>>
>> psycopg.adapters.register_loader("jsonb", CyanJSONBLoader)
>>
>> class CyanJSONBDumper(Dumper):
>> def dump(self, obj):
>> return orjson.dumps(obj)
>>
>> psycopg.adapters.register_dumper("jsonb", CyanJSONBDumper)
>>
>
> The calls work, but the dump/load functions are never called.
I think you might need to use:
https://www.psycopg.org/psycopg3/docs/basic/adapt.html#adapt-json
>
> Thanks!
>
--
Adrian Klaver
adrian.klaver@aklaver.com
On 11/16/25 08:56, Christophe Pettus wrote:
> Hi!
>
> I am attempting to override the default adapters for JSON and JSONB in psycopg (3), but I am not quite sure how to go
aboutit (I'm testing using orjson for serialization and deserialization). This doesn't appear to work:
>
>> class CyanJSONBDumper(Dumper):
>> def dump(self, obj):
>> return orjson.dumps(obj)
>>
>> psycopg.adapters.register_dumper("jsonb", CyanJSONBDumper)
Following:
https://www.psycopg.org/psycopg3/docs/api/abc.html#psycopg.abc.Dumper.dump
I believe it should be something like:
psycopg.adapters.register_dumper(<some_python_object>, CyanJSONBDumper)
--
Adrian Klaver
adrian.klaver@aklaver.com
> On Nov 16, 2025, at 09:30, Adrian Klaver <adrian.klaver@aklaver.com> wrote: > > https://www.psycopg.org/psycopg3/docs/api/abc.html#psycopg.abc.Dumper.dump > > I believe it should be something like: > > psycopg.adapters.register_dumper(<some_python_object>, CyanJSONBDumper) Thank you!
On 11/16/25 09:43, Christophe Pettus wrote: > > >> On Nov 16, 2025, at 09:30, Adrian Klaver <adrian.klaver@aklaver.com> wrote: >> >> https://www.psycopg.org/psycopg3/docs/api/abc.html#psycopg.abc.Dumper.dump >> >> I believe it should be something like: >> >> psycopg.adapters.register_dumper(<some_python_object>, CyanJSONBDumper) > > Thank you! I tried my original suggestion of using: https://www.psycopg.org/psycopg3/docs/basic/adapt.html#adapt-json and it seems to work. Which this issue: https://github.com/psycopg/psycopg/pull/568 confirms should be the case. -- Adrian Klaver adrian.klaver@aklaver.com