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

Программы на Python
Ответить
Anonymous
 Многомерные массивы PostgreSQL в SQLAlchemy

Сообщение Anonymous »

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

Код: Выделить всё

((1,2), (3,4), (5,6,7))
В примере ниже этот столбец — модель. Я подумал, что разумным подходом может быть хранение данных в виде двухмерной таблицы PG, которая в PG выглядит как целое число[][]. Я не знаю, в какой форме SQLA вернет это в Python, но надеюсь, что это будет что-то вроде кортежа кортежей.

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


item_type — тип данных элементов этого массива. Обратите внимание, что
размерность здесь не имеет значения, поэтому многомерные массивы, такие как
INTEGER[][], создаются как ARRAY(Integer), а не как
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
);
что, конечно, неправильно. Что мне не хватает?

Подробнее здесь: https://stackoverflow.com/questions/972 ... sqlalchemy
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»