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