2013-03-01 20 views
6

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ó

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.

Các vấn đề liên quan