Многомерные массивы PostgreSQL в SQLAlchemy

Я использую SQLAlchemy 0.6.3 с PostgreSQL 8.4 на Debian сжатия. Мне нужна таблица, в которой в одном столбце хранится что-то в PostgreSQL, которое отображается в Python как список целочисленных списков или кортежей целочисленных кортежей. Например.

((1,2), (3,4), (5,6,7))

В приведенном ниже примере этот столбец — model. Я подумал, что разумным подходом может быть хранение данных в виде двумерной таблицы PG, которая в PG выглядит как integer[][]. Я не знаю, в какой форме SQLA вернет это Python, но я надеюсь, что это что-то вроде кортежа кортежей.

Однако я не могу понять, как заставить SQLA предоставить мне двумерный массив целых чисел. В документациидля sqlalchemy.dialects.postgresql.ARRAYуказано

item_type — тип данных элементов этого массива. Обратите внимание, что размерность здесь не имеет значения, поэтому многомерные массивы, такие как INTEGER[][], строятся как ARRAY(Integer), а не как МАССИВ(МАССИВ(Целое число)) или что-то в этом роде. Отображение типов вычисляется на лету.

К сожалению, я понятия не имею, что это значит. Как отображение типов может определить это на лету? Он должен создать правильный DDL. Моим первым и единственным предположением о том, как это сделать, было ARRAY(ARRAY(Integer)). В настоящее время у меня есть

  crossval_table = Table(
        name, meta,
        Column('id', Integer, primary_key=True),
        Column('created', TIMESTAMP(), default=now()),
        Column('sample', postgresql.ARRAY(Integer)),
        Column('model', postgresql.ARRAY(Integer)),
        Column('time', Float),
        schema = schema,

. Это создает следующий DDL

CREATE TABLE crossval (
    id integer NOT NULL,
    created timestamp without time zone,
    sample integer[],
    model integer[],
    "time" double precision
);

, который, конечно, неверен. Что я упускаю?

8
задан Faheem Mitha 20 March 2012 в 22:06
поделиться