2

我在声明性基础中使用 PostgreSQL 和 SQLAlchemy 为我的数据库创建了一个模式,并遇到了一个我认为已经回答的问题,但我在某种程度上弄错了语法。

我正在考虑有一个多维数组的条目(我只需要 2D,但我想我会要求一个 n 维数组解决方案,以防遇到其他问题)。我基本上需要,some_field[string][string]但不确定如何做到这一点。

class SomeTable(Base):
    __tablename__ = 'some_table'
   multi_d_array = Column(postgresql.ARRAY(String)) #How do I make 2D+?

较早版本的维度显然未强制执行(链接:SQLAlchemy 中的 PostgreSQL 多维数组),但显然已对此进行了修补(链接:https ://groups.google.com/forum/?fromgroups=#!topic/sqlalchemy/w4-nbMdxxUg )。文档仍然说它没有强制执行(链接:http ://docs.sqlalchemy.org/en/latest/dialects/postgresql.html ),但我只是想确保代码在我的数据库崩溃之前正常工作。

感谢您帮助我解决我的新手问题。

4

1 回答 1

0

Postgresql 本身并不强制数组的维数——所有数组都是 N 维的,即使你指定了特定的维数。从链接的电子邮件:

http://www.postgresql.org/docs/9.1/static/arrays.html

“当前的实现也不强制声明的维数。特定元素类型的数组都被认为是同一类型,无论大小或维数如何。因此,在 CREATE 中声明数组大小或维数TABLE 只是文档;它不会影响运行时行为。”

在 SQLAlchemy 0.8 中,ARRAY 类型现在包含一个可选参数“dimension=N”,您可以给它指定维数,这将允许 SQLAlchemy 类型在 Python 中更快地处理传入的数组数据(它不需要猜测维度的数量),并使其专门发出具有该维度数量的 DDL(即 CREATE TABLE),但如果没有此参数,一切仍将按原样工作。您所指的电子邮件是一个用户,他希望它在发出 DDL 时以确切的维度数说“INTEGER [] []”,但实际上没有必要。

于 2012-12-15T04:40:12.850 回答