Я использую 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
);
, который, конечно, неверен. Что я упускаю?