SqlAlchemy: массив настраиваемых типов Postgresql

Итак, в моей базе данных postgres у меня есть следующий настраиваемый тип:

create type my_pg_type as (  
    sting_id varchar(32),
    time_diff interval,
    multiplier integer
);

Чтобы еще больше усложнить ситуацию, он используется как массив:

alter table my_table add column my_keys my_pg_type [];

Я хотел бы отобразить это с SQLAlchemy (0.6.4) !!

(извинения за эликсир)

from sqlalchemy.dialects.postgresql import ARRAY
from sqlalchemy.types import Enum
from elixir import Entity, Field    

class MyTable(Entity):
    # -- snip --
    my_keys = Field(ARRAY(Enum))

Я знаю, что "Enum" неверен в приведенном выше.

В качестве примера значения, возвращаемого из базы данных для этого столбца массива, я показал ниже значение в ARRAY.result_processor (self, dialect, coltype) :

class ARRAY(sqltypes.MutableType, sqltypes.Concatenable, sqltypes.TypeEngine):
    # -- snip --  
    def result_processor(self, dialect, coltype):
        item_proc = self.item_type.result_processor(dialect, coltype)
        if item_proc:
            def convert_item(item):
                if isinstance(item, list):
                    return [convert_item(child) for child in item]
                else:
                    return item_proc(item)
        else:
            def convert_item(item):
                if isinstance(item, list):
                    return [convert_item(child) for child in item]
                else:
                    return item
        def process(value):
            if value is None:
                return value
            """
            # sample value:
             >>> value
            '{"(key_1,07:23:00,0)","(key_2,01:00:00,20)"}'
            """
            return [convert_item(item) for item in value]
        return process

Итак, приведенное выше функция процесса неправильно разделяет строку, предполагая, что это уже список.

До сих пор я успешно создал подклассы ARRAY, чтобы правильно разделить строку, и вместо Enum я попытался написать свой собственный тип (реализующий Unicode), чтобы воссоздать (строка, timedelta, integer) , но столкнулись с множеством трудностей, в частности с правильным преобразованием интервала в Python timedelta .

Я пишу здесь на случай, если мне не хватает очевидного прецедентного способа сделать это?

5
задан EoghanM 4 March 2012 в 06:18
поделиться