Python 内部数组中包含空元素的多维数组
所以,我有这个表:Python 内部数组中包含空元素的多维数组,python,postgresql,multidimensional-array,sqlalchemy,Python,Postgresql,Multidimensional Array,Sqlalchemy,所以,我有这个表: CREATE TABLE test ( id_doc integer not null, multi timestamp without time zone[] ); “multi”列应该表示类似于此JSON数组的数据: [ ['2017-02-03T17:20:00', '2017-02-03T17:20:01'], ['2017-02-01T16:21:55', '2017-02-02T13:23:03'], ] 它工作正常,除非其中
CREATE TABLE test (
id_doc integer not null,
multi timestamp without time zone[]
);
“multi”列应该表示类似于此JSON数组的数据:
[
['2017-02-03T17:20:00', '2017-02-03T17:20:01'],
['2017-02-01T16:21:55', '2017-02-02T13:23:03'],
]
它工作正常,除非其中一个内部数组为空。
当我尝试插入:
INSERT INTO test (id_doc, multi)
VALUES (1, ARRAY[ARRAY[NULL], ARRAY['2017-02-03T17:01:30'::timestamp]]);
Postgres(9.3)给了我以下错误:
ERROR: ARRAY could not convert type timestamp without time zone[] to text[]
LINE 2: VALUES (1, ARRAY[ARRAY[NULL], ARRAY['2017-03-02T16:53:00'::t...
^
尽管错误指向第二个元素(数组['2017-02-03T17:01:30'::timestamp]),但问题似乎源于第一个元素(数组[NULL]),因为如果我将INSERT语句更改为:
INSERT INTO test (id_doc, multi)
VALUES (1, ARRAY[ARRAY[NULL::timestamp], ARRAY['2017-02-03T17:01:30'::timestamp]]);
不幸的是,我使用的是SQLAlchemy ORM(Python),似乎找不到强制SQLAlchemy将强制转换后缀附加到空字段(::timestamp)的方法。现在不使用SQLAlchemy不是一个选项
这似乎只发生在时间戳多维数组上。例如,如果“multi”是text[]类型,我可以在内部数组中插入带有NULL元素的行(没有强制转换后缀)
我不明白为什么Postgres抱怨空元素
那么,有没有人知道一种方法:
谢谢 我认为您应该展示Python代码,其中sqlalchemy被告知要发挥其神奇作用。这里有几种替代方法:
array[null]::timestamp[]
或'{null}::timestamp[]
您可以通过函数插入/更新数据,或者使用多文本[]
在test
表上创建视图,并为强制转换文本[]]要在insert/UPDATE上添加时间戳[],请提供完整的MCVE?查看一个适当MCVE的示例。我认为您应该展示Python代码,其中sqlalchemy被告知要发挥其魔力。这里有几种替代方法:array[null]::timestamp[]
或'{null}'::timestamp[]
您可以通过函数插入/更新数据,或使用多文本[][]在测试表上创建视图
并在插入/更新时为转换文本[]到时间戳[]创建触发器能否提供完整的MCVE?有关正确MCVE的示例,请参见。