Voglio usare il tipo HSTORE
per una colonna se utilizza PostgreSQL come suo backend, o PickleType
altrimenti. Il problema è che non possiamo determinare quale back-end sarà usato quando lo schema è in via di definizione (in Python). Come posso determinarlo e scegliere condizionatamente il tipo di dati quando la tabella viene effettivamente creata nel database di back-end?SQLAlchemy: Come scegliere condizionalmente il tipo per la colonna in base al suo backend
6
A
risposta
9
È possibile realizzare qualcosa di simile con TypeEngine.with_variant
:
from sqlalchemy.types import PickleType
from sqlalchemy.dialects import postgresql
HybridType = PickleType()
HybridType = HybridType.with_variant(postgresql.HSTORE(), 'postgresql')
Questo crea un nuovo tipo, HybridType
, che si può utilizzare come qualsiasi altro tipo, con l'avvertenza che esso produrrà una colonna HSTORE
su Postgres e a PickleType
ovunque altro.