【发布时间】:2012-03-15 22:33:16
【问题描述】:
我在 Debian Squeeze 上使用 SQLAlchemy 0.6.3 和 PostgreSQL 8.4。我想要一个表,其中一列在 PostgreSQL 中存储一些东西,在 Python 中显示为整数列表或整数元组的元组的列表。例如
((1,2), (3,4), (5,6,7))
在下面的示例中,该列是model。我认为一种合理的方法可能是将内容存储为 PG 二维表,在 PG 中看起来像 integer[][]。我不知道 SQLA 会以什么形式将它返回给 Python,但我希望它类似于元组的元组。
但是,我不知道如何告诉 SQLA 给我一个二维整数数组。 documentation for 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
);
当然,这是不对的。我错过了什么?
【问题讨论】:
-
如果您要做很多此类事情,那么您可能不会考虑天气关系数据库是您的最佳选择。
-
@Mark:我不关注。很多什么样的东西?
-
如果您尝试保存大量数组数组或地图映射等,那么您可能不会将支持该概念的数据库视为第一类,例如 redis
-
@Mark:好的,我明白了。不,它只是一些信息的方便占位符。没有什么很重要的。
-
如果您其余的大部分数据都很好并且关系很好,那么我想它会引起人们的注意。
标签: python multidimensional-array sqlalchemy