Я использую SQLAlchemy 0.6.3 с PostgreSQL 8.4 на сжатие Debian. Мне нужна таблица, в которой один столбец хранит что-то в PostgreSQL, которое отображается в Python в виде списка целочисленных списков или кортежей целочисленных кортежей. Э.Г.
((1,2), (3,4), (5,6,7))
В приведенном ниже примере этот столбец model
. Я подумал, что разумным подходом может быть сохранение материала в виде таблицы измерений PG 2, которая в PG выглядит как integer[][]
. Я не знаю, в какой форме SQLA вернет это в Python, но я надеюсь, что это что-то вроде кортежа кортежей.
Однако я не могу понять, как заставить SQLA дать мне двумерный массив Integer. документация для sqlalchemy.dialects.postgresql.ARRAY
говорит
item_type - тип данных элементов этого массива. Обратите внимание, что
размерность здесь не имеет значения, поэтому многомерные массивы, такие как
INTEGER [] [], создаются как ARRAY (Integer), а не как
ARRAY (ARRAY (Целое число)) или что-то подобное. Типовое отображение выясняется на лету.
К сожалению, я понятия не имею, что это значит. Как сопоставление типов может понять это на лету? Нужно создать правильный 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
);
что не правильно, конечно. Чего мне не хватает?