这是一个关于如何将Python中的数组-有符号整数数组转换为PostgreSQL中的
我在思考如何快速进行转换。
int
类型的后续问题:How to cast to int array in PostgreSQL?我在思考如何快速进行转换。
import numpy as np; # use any data format of Python here
event = np.array([[1,2],[3,4]]);
在手动操作时,应将[]
替换为{}
并用'
括起来。
在PostgreSQL中,以下内容被接受为数据类型的语法。
...
FOR EACH ROW EXECUTE PROCEDURE insaft_function('{{1,2},{3,4}}');
@JohnMee的建议
str(event).replace('[','{').replace(']','}').replace('\n ',',')
@ErwinBrandstetter的建议
因为有SQL标准支持,所以请使用有符号整数。将其映射为int
,所以只需在PostgreSQL端进行如下操作:
TG_ARGV::int[]
我希望你能遵循Erwin的建议。
简化版@ErwinBrandstetter答案的测试运行
为了让函数更加专注于这里的内容,我必须简化他的回答,将表名从函数中删除,只保留一个初始表measurements的触发器:
CREATE OR REPLACE FUNCTION f_create_my_trigger(_arg0 text)
RETURNS void AS
$func$
BEGIN
EXECUTE format($$
DROP TRIGGER IF EXISTS insaft_ids ON measurements;
CREATE TRIGGER insaft_ids
AFTER INSERT ON measurements
FOR EACH ROW EXECUTE PROCEDURE insaft_function(%1$L)$$
, _arg0
);
END
$func$ LANGUAGE plpgsql;
我奔跑:
sudo -u postgres psql detector -c "SELECT f_create_my_trigger('[[1,2],[3,4]]');"
但是输出为空:
f_create_my_trigger
---------------------
(1 row)
如何在Python中将映射到PostgreSQL 9.4的int
?
无符号整数(unsigned integer)
需要小心处理。标准的Postgres仅支持SQL标准中定义的有符号整数。您可能希望将其映射为bigint
而不是int
,以避免在上半部分发生溢出。或者安装 Peter Eisentraut 提供的扩展程序pguint
。 - Erwin Brandstetterbigint[]
而不是int[]
。在我的先前回答中,这将是TG_ARGV[0]::bigint[]
。我无法对NumPy部分发表评论,因为我不使用它。 - Erwin Brandstetterinteger
。假设是有符号整数的二维数组。 - Léo Léopold Hertz 준영