6

Ich möchte HSTORE Typ für eine Spalte verwenden, wenn es PostgreSQL als Back-End verwendet, oder PickleType andernfalls. Das Problem ist, dass wir nicht bestimmen können, welches Backend verwendet wird, wenn das Schema definiert wird (in Python). Wie kann ich dies bestimmen und bedingt den Datentyp auswählen, wenn die Tabelle tatsächlich in der Backend-Datenbank erstellt wird?SQLAlchemy: Wie Typ für Spalte abhängig von seinem Backend bedingt

Antwort

9

Sie können mit TypeEngine.with_variant so etwas wie dies erreichen:

from sqlalchemy.types import PickleType 
from sqlalchemy.dialects import postgresql 

HybridType = PickleType() 

HybridType = HybridType.with_variant(postgresql.HSTORE(), 'postgresql') 

Dies schafft eine neue Art, HybridType, die Sie wie jede andere Art verwenden können, mit dem Vorbehalt, dass es eine HSTORE Spalte auf Postgres produzieren und a PickleType überall sonst.