Tôi muốn sử dụng loại HSTORE
cho cột nếu nó sử dụng PostgreSQL làm phần phụ của nó, hoặc PickleType
nếu không. Vấn đề là chúng ta không thể xác định backend nào sẽ được sử dụng khi lược đồ đang được định nghĩa (bằng Python). Làm thế nào tôi có thể xác định điều này và có điều kiện chọn kiểu dữ liệu khi bảng thực sự được tạo ra trên cơ sở dữ liệu phụ trợ?SQLAlchemy: Làm thế nào để có điều kiện chọn loại cho cột bằng cách phụ thuộc vào phần phụ của nó
6
A
Trả lời
9
Bạn có thể thực hiện một cái gì đó như thế này với TypeEngine.with_variant
:
from sqlalchemy.types import PickleType
from sqlalchemy.dialects import postgresql
HybridType = PickleType()
HybridType = HybridType.with_variant(postgresql.HSTORE(), 'postgresql')
Điều này tạo ra một loại mới, HybridType
, mà bạn có thể sử dụng như bất kỳ loại khác, với sự báo trước rằng nó sẽ tạo ra một cột HSTORE
trên Postgres và a PickleType
ở mọi nơi khác.