Обсуждение: Overriding default adapters in psycopg

Поиск
Список
Период
Сортировка

Overriding default adapters in psycopg

От
Christophe Pettus
Дата:
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!


Re: Overriding default adapters in psycopg

От
Adrian Klaver
Дата:
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



Re: Overriding default adapters in psycopg

От
Adrian Klaver
Дата:
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



Re: Overriding default adapters in psycopg

От
Christophe Pettus
Дата:

> 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!



Re: Overriding default adapters in psycopg

От
Adrian Klaver
Дата:
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