Ich benutze die SQLAlchemy-Core-Bibliothek, um auf einige PostgreSQL-Datenbanken zuzugreifen. Betrachte Ich habe die folgende Tabelle:Verwenden eines benutzerdefinierten JSON-Encoders für SQLAlchemy's PostgreSQL-JSONB-Implementierung
create table foo (j jsonb);
Und den folgenden Python-Code:
from decimal import *
from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey, DateTime
from sqlalchemy.dialects.postgresql import JSONB
metadata = MetaData(schema="public")
foo = Table('foo', metadata,Column('f', JSONB))
d = Decimal(2)
ins = foo.insert().values(j = {'d': d})
# assuming engine is a valid sqlalchemy's connection
engine.execute(ins)
Dieser letzte Satz mit dem folgenden Fehler fehl:
StatementError("(builtins.TypeError) Decimal('2') is not JSON serializable",)
, weshalb ich dies zu fragen Frage: Gibt es eine Möglichkeit, einen benutzerdefinierten Encoder für SQLAchemy anzugeben, der beim Kodieren von JSON-Daten im PostgreSQL-Dialekt verwendet werden soll?
Ehrfürchtig Es kann mit dem
json_serializer
param wie in @ univerio Antwort in den sqlalchemy Motor abgebildet werden. Habe diesen Teil der Dokumentation verpasst. Werde es morgen versuchen und die Antwort entsprechend akzeptieren. Vielen Dank!! –