Skip to content

Commit bd535da

Browse files
Handle pyscopg3 specific adapters
1 parent 4ddb5d4 commit bd535da

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

bitfield/types.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,3 +257,22 @@ def get_label(self, flag):
257257
Database.extensions.register_adapter(BitHandler, lambda x: Database.extensions.AsIs(int(x)))
258258
except ImproperlyConfigured:
259259
pass
260+
261+
# psycopg3 adapter registration: register a dumper that
262+
# encodes Bit/BitHandler as BIGINT so parameters are typed correctly.
263+
try:
264+
from psycopg import adapters
265+
from psycopg.adapt import Dumper
266+
except Exception:
267+
pass
268+
else:
269+
270+
class _BitLikeDumper(Dumper):
271+
# OID 20 is int8 (BIGINT) in PostgreSQL, matching Django's BigIntegerField
272+
oid = 20
273+
274+
def dump(self, obj):
275+
return str(int(obj)).encode()
276+
277+
adapters.register_dumper(Bit, _BitLikeDumper)
278+
adapters.register_dumper(BitHandler, _BitLikeDumper)

0 commit comments

Comments
 (0)